8
votes

Pourquoi utiliser $ ceci à l'intérieur d'une classe dans un plug-in WordPress lancer une erreur fatale?

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 . 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>

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>

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'));
}


0 commentaires

4 Réponses :


1
votes

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.


1 commentaires

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.



10
votes

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;
}


1 commentaires

Hey ..., le code ne fonctionne pas pour moi. Donc, je change ce add_action ('admin_menu', 'my_plugin_menu'); fonction à ce add_action ('admin_menu', tableau ($ ceci, 'my_plugin_menu'));



4
votes

Ce que vous devriez faire est ce que vous devriez faire est ce que vous devez faire: xxx

à l'aide d'une matrice ("myClass '," index ") 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. xxx

fonctionnerait également si vous souhaitez réutiliser l'objet.


0 commentaires

5
votes

2 commentaires

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.