web-dev-qa-db-fra.com

Vérification du rôle de l'utilisateur dans un plugin personnalisé

Dans le fichier functions.php de mon thème, je n'ai aucune difficulté à vérifier le rôle de l'utilisateur. J'ai vérifié de deux manières différentes:

if ( current_user_can('wholesale_customer') ) { 
    // my code
}

et

$current_user = wp_get_current_user();
if ( in_array( 'wholesale_customer', (array) $current_user->roles )) {
// my code
}

Les deux fonctionnent parfaitement dans mon fichier functions.php. Cependant, j'ai un plugin personnalisé, et tout simplement en mettant le:

$current_user = wp_get_current_user();

une partie fait que la page entière ne fonctionne pas. Donc ma question est: comment puis-je vérifier l'utilisateur actuel dans un plugin personnalisé?

2
Kristoffer M

Pourquoi ça ne marche pas pour un plugin:

Cela ne fonctionne pas pour le plugin car au moment où WordPress exécute $current_user = wp_get_current_user(); dans un plugin, la fonction wp_get_current_user() n'est pas encore définie. WordPress charge ce fichier de plugin avant qu'il ne définisse ces fonctions liées à l'utilisateur. Cependant, cela fonctionne pour thème car WordPress charge le thème après avoir défini et lancé ces fonctions centrées sur l'utilisateur.

Comment le faire fonctionner dans un plugin:

Pour que cela fonctionne dans un plugin, vous pouvez utiliser un hook d’action. Par exemple, cela fonctionnera une fois que le hook d'action plugins_loaded aura été déclenché. Comme le code ci-dessous:

add_action( 'plugins_loaded', 'check_current_user' );
function check_current_user() {
    // Your CODE with user data
    $current_user = wp_get_current_user();

    // Your CODE with user capability check
    if ( current_user_can('wholesale_customer') ) { 
        // Your CODE
    }
}

Avec le CODE ci-dessus, la vérification du rôle avec current_user_can() et l'obtention des informations utilisateur avec wp_get_current_user() fonctionnent dans un plug-in.

3
Fayaz