web-dev-qa-db-fra.com

Création d'une page de menu dans un plugin développé orienté objet

J'essaie pour la première fois de construire un plugin pour Wordpress suivant OOP. J'ai des problèmes en essayant de créer une page de sous-menu en utilisant la fonction add_users_page().

Voici une version simple de mon code:

class MyPlugin  {
    public function __construct()
    {
       add_action('admin_menu', array($this, 'create_menu'));
    }

    public static function create_menu()
    {
    add_users_page( 'My Plugin Menu', 'My Plugin Menu (Test)', 'list_users', 'mp_test_page', array($this, 'display_test_page'));
    }

    public static function display_test_page()
    {
    if ( !current_user_can( 'list_users' ) )  {
    wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
            }
    echo '<h2>Test page</h2>';
    echo '<p>The Problem : I cannot see that output in the corresponding submenu page</p>';
    }
}
new MyPlugin();

Le problème est que je ne peux pas voir la sortie HTML dans la fonction display_test_page() ... bien que la page de sous-menu ait bien été créée dans le menu général Utilisateurs.

Merci d'avance pour votre aide,

2
user54952

Vous vous êtes mélangé dans une utilisation statique et non statique. Votre style n'est pas statique, mais vos méthodes sont déclarées comme telles. Si vous activez le mode WP_DEBUG vous verrez les erreurs suivantes:

Remarque: Variable non définie: this

Avertissement: call_user_func_array () s'attend à ce que le paramètre 1 soit un rappel valide, le premier membre du groupe n'est pas un nom de classe ou un objet valide

Cela est dû au fait que la méthode statique ne "sait" pas à quoi se réfère $this, car statique n'est pas lié àspecific/ instance de la classe.

Déclarez simplement vos méthodes avec public plutôt que public static pour cette organisation de code.

1
Rarst