web-dev-qa-db-fra.com

Obtenir des rôles d'utilisateur dans les fichiers de plug-in

J'ai un plugin dans lequel j'ai besoin d'utiliser la fonction get_editable_roles () mais je reçois une erreur fatale en disant que la fonction n'existe pas.

Dans mon fichier de plugin principal, j'ai ce code:

function prefix_run_plugin() {
    $plugin = new Plugin_Class("1.0");
    $plugin->run();
    register_activation_hook( __FILE__, array($plugin, 'initialize') );
    register_uninstall_hook( __FILE__, array('Plugin_Class', 'rollback') );
}

prefix_run_plugin();

Je dois utiliser la fonction get_editable_roles dans le constructeur. Il semble que lorsque cette fonction est appelée, les fichiers WordPress appropriés n’ont pas encore été chargés, ce qui entraîne une erreur fatale. Toutes les autres fonctions de WordPress fonctionnent correctement. Tout conseil serait vraiment apprécié.

Merci d'avance.

1
Hasan Akhtar

Je pensais que mon commentaire ferait une meilleure réponse, alors allons-y.

Vous pouvez relier d'autres méthodes de la classe du plugin à admin_init (pour le côté admin) dans le constructeur, comme suit:

class Plugin_Class {

    public function __construct() {
        add_action( 'admin_init', array( $this, 'some_other_method' ) );
    }

    public function some_other_method() {
        // do something fancy with get_editable_roles()
    }
}

Il s’agit généralement d’une meilleure pratique, qui consiste à accrocher init pour des éléments frontaux, plutôt que d’appeler directement des éléments depuis le constructeur, car cela permet de tout charger correctement en premier. En outre, d'autres développeurs peuvent supprimer le hook s'ils utilisent votre plugin et souhaitent l'étendre/le modifier, sans avoir à pirater directement le fichier. En gros, votre constructeur est juste un grand ensemble de hooks d'initialisation, ou un seul hook pour une méthode d'initialisation séparée.

De plus, gardez à l'esprit que get_editable_roles () n'est chargé que dans les zones d'administration, où is_admin () serait évalué à vrai. Vous pouvez également envisager de vérifier cela quelque part dans le plug-in avant de tenter d'utiliser la fonction de rôles modifiables.

1
Andrew Bartel