Je suis en train d'écrire un plug-in WordPress qui crée une page de la zone d'administration, ainsi que d'exécuter un code frontal.
Le code ci-dessous jette une erreur fatale Peut-être que je ne suis peut-être pas la structure du plugin WordPress prévu pour les fonctions et les classes, mais le code conceptuel ci-dessous a été créé à l'aide des entrées correspondantes sur plugin Développement dans le MordPress Codex. P> Quelqu'un pourrait-il expliquer pourquoi l'erreur est déclenchée, car lorsque je crée une instance de la classe en dehors du code WordPressBase tout va bien. P> . Pas dans le contexte d'objet code> erreur. Ce qui est plutôt mystifiant, car la variable est appelée à l'intérieur de la classe. P>
if (!class_exists("MyClass")) {
class MyClass {
var $test = 'Test variable';
public function index() {
//Index code
}
public function add() {
echo $this->test;
}
}
}
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
add_menu_page('My Plugin', 'My Plugin', 'manage_options', 'my-plugin', array('MyClass', 'index'));
add_submenu_page('my-plugin', 'Add New Thing', 'Add New', 'manage_options', 'my-plugin-add', array('MyClass', 'add'));
}
4 Réponses :
dépend de la manière dont la classe est appelée, de la classe statiquement :: méthode () lancera des erreurs. Si tel est le cas, je pense que vous devez utiliser Self :: $ test; mais pourrait avoir tort. P>
Je ne sais pas comment WordPress appelle la classe, mais utiliser Self :: Test au lieu de $ Ceci-> Test ne résolvez pas l'erreur, j'ai peur.
Donc, je semble y avoir réparé, en remontant aux bases et en demandant à Google la question humble: "en utilisant des classes dans les plug-ins WordPress". em> à la fois l'article par Jay Forner et un sur dconstruction.com ont été utiles. p> Fondamentalement, j'appelle maintenant add_menu_page et add_submenu_page de dans la classe. J'étais sous l'impression que ces fonctions ont créé une manière d'une manière ou d'une autre création d'un objet, mais ce n'est évidemment pas. P> Mon code regarde maintenant quelque chose comme ça et je suis capable d'appeler la variable de classe déclarée sans erreur: p > if (!class_exists("MyClass")) {
class MyClass {
var $test = 'Test variable';
function __construct() {
add_action('admin_menu', 'my_plugin_menu');
}
function my_plugin_menu() {
add_menu_page('My Plugin', 'My Plugin', 'manage_options', 'my-plugin', array(&$this, 'index'));
add_submenu_page('my-plugin', 'Add New Thing', 'Add New', 'manage_options', 'my-plugin-add', array(&$this, 'add'));
}
public function index() {
//Index code
}
public function add() {
echo $this->test;
}
}
new MyClass;
}
Hey ..., le code ne fonctionne pas pour moi. Donc, je change ce add_action ('admin_menu', 'my_plugin_menu'); code> fonction à ce
add_action ('admin_menu', tableau ($ ceci, 'my_plugin_menu')); code>
Ce que vous devriez faire est ce que vous devriez faire est ce que vous devez faire: à l'aide d'une matrice fonctionnerait également si vous souhaitez réutiliser l'objet. P> p> ("myClass '," index ") code> cause php pour exécuter la méthode comme méthode statique , mais en passant un objet réel que le premier argument appellera la méthode via l'objet. p>
Ce ne l'est plus.
Ne pas oublier, si vous passez dans la classe, vous pouvez passer par référence, vous pouvez même passer un cours propres fonctions en utilisant & $ this à l'intérieur d'une classe et continuer à modifier la même instance, cette aide de ne pas avoir à recréer un chaque classe que vous appelez une autre partie du plug-in, mais la même classe. p> Blockquote>
Action intérieure J'ai ajouté une balise de formulaire. Alors, que dois-je passer en action et où puis-je obtenir une valeur postale? Merci d'avance.
Vérifiez le tableau $ _Post pour les valeurs postales.