Comment afficher un élément de menu de la barre d'administration uniquement aux utilisateurs avec certaines capacités?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/17689

Question

Je suis en train d'ajouter des éléments à la barre d'administration, mais seulement pour les utilisateurs ayant certaines capacités, comme add_movies dans un plug-in. Le problème est que, selon la @toscho et @TheDeadMedic , le plugin exécute son code trop tôt dans l'ordre de opérations à l'utilisation current_user_can.

J'ai essayé d'utiliser if ($user->has_cap('add_movies')) mais get Fatal error: Call to a member function has_cap() on a non-object in xxx.

Suis-je manque un ou global évident est la solution la plus compliquée?

Était-ce utile?

La solution

Le chèque sera appelé trop tôt si vous écrivez simplement dans votre fichier plugin comme ceci:

if ( current_user_can( 'add_movies' ) ) {
    add_action( 'admin_bar_menu', 'wpse17689_admin_bar_menu' );
}
function wpse17689_admin_bar_menu( &$wp_admin_bar )
{
    $wp_admin_bar->add_menu( /* ... */ );
}

Parce qu'il exécutera lorsque vos plug-ins est chargé, ce qui est très tôt dans le processus de démarrage.

Ce que vous devez faire est d'ajouter toujours l'action, mais dans le rappel pour le contrôle d'action pour current_user_can(). Si vous ne pouvez pas faire l'action, il suffit de retourner sans ajouter l'élément de menu.

add_action( 'admin_bar_menu', 'wpse17689_admin_bar_menu' );
function wpse17689_admin_bar_menu( &$wp_admin_bar )
{
    if ( ! current_user_can( 'add_movies' ) ) {
        return;
    }
    $wp_admin_bar->add_menu( /* ... */ );
}

Autres conseils

Essayez avec if ( current_user_can('capability') ) : /* your code */; endif;

EDIT: avez pas lu votre Q complètement. Avez-vous essayé ce qui suit?

global $current_user;
get_currentuserinfo();

// Here you can start interacting with everything the current user has:
echo '<pre>';
    print_r($current_user); // show what we got to offer
echo '</pre>';

// Then you'll have to do something with the role to get the caps and match against them
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top