web-dev-qa-db-fra.com

add_menu_page () avec une fonction dans une classe

Je suis un développeur expérimenté, mais nouveau dans WordPress. Je suis un cours sur udemy et ils m'ont suggéré d'encapsuler mes fonctions de plug-in dans une classe pour éviter les conflits d'espaces de noms. Cependant, dans l'un de mes crochets d'action (je ne suis pas sûr que ce soit le terme qui convient), j'essaie d'appeler add_menu_page() pour ajouter des éléments de menu à la barre latérale d'administration, sans que je sache comment référencer ma fonction. Si je lui donne simplement le nom de la fonction dans ma classe "testing_options_page", alors WP ne trouvera pas la fonction. Si j'essaie de l'envelopper dans un tableau pour déclarer le nom de la classe et la fonction, comme je l'avais fait avec l'appel add_action(), le code WP car il n'attend pas de tableau pour ce paramètre array('kenny_plugin6', 'testing_options_page').

Comment puis-je référencer la fonction dans la classe lors de l'appel de la fonction add_menu_page()?

Question secondaire: est-ce que le fait d’envelopper mon code dans une classe sera plus pénible que ça en vaut la peine?

add_action( 'admin_menu', array( 'kenny_plugin6', 'add_menu_items' ) );

class kenny_plugin6 {
   function add_menu_items() {
      add_menu_page( 'Browser Tab Title', 'Menu Item Title', 'manage_options', 
            'testing_menu_page', 'testing_options_page', '', '25' );
      add_submenu_page( 'testing_menu_page', 'Test Links', 'Test Title', 'manage_options', 
            'get_test_links' );

   }

   function testing_options_page() {
      ?>
      <h3>Testing Options</h3>

      <div>Put more stuff here</div>
      <?php
   }

   function get_test_links() {
      ?>
      <h3>Test Links</h3>

      <div> Put more stuff here.</div>
      <?php
   }
}
1
Kenny Wyland

add_action doit être à l'intérieur de la classe du plugin et doit ressembler à

 add_action( 'admin_menu', array( $this, 'add_menu_items' ) );

Généralement, cette ligne se présente dans la méthode __construct ().

3
KAGG Design