it-swarm.com.de

Wie kann ich einen Menüeintrag in der Admin-Leiste nur Benutzern mit bestimmten Funktionen anzeigen?

Ich versuche, der Admin-Leiste Elemente hinzuzufügen, aber nur für Benutzer mit bestimmten Funktionen, z. B. add_movies in einem Plugin. Das Problem ist, dass nach @ toscho und @ TheDeadMedic die Das Plugin führt seinen Code zu früh in der Reihenfolge der Operationen aus, um current_user_can zu verwenden.

Ich habe versucht, if ($user->has_cap('add_movies')) zu verwenden, erhalte aber Fatal error: Call to a member function has_cap() on a non-object in xxx.

Vermisse ich eine offensichtliche globale oder ist die Lösung komplizierter?

1
torinagrippa

Die Prüfung wird zu früh aufgerufen, wenn Sie sie einfach wie folgt in Ihre Plugin-Datei schreiben:

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( /* ... */ );
}

Weil es ausgeführt wird, wenn Ihre Plugins geladen werden, was sehr früh im Startprozess ist.

Was Sie tun sollten, ist immer die Aktion hinzuzufügen, aber dann im Rückruf für die Aktion auf current_user_can() zu prüfen. Wenn Sie die Aktion nicht ausführen können, kehren Sie einfach zurück, ohne das Menüelement hinzuzufügen.

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( /* ... */ );
}
2
Jan Fabry

Probieren Sie es mit if ( current_user_can('capability') ) : /* your code */; endif;

EDIT: Habe dein Q nicht vollständig gelesen. Haben Sie folgendes versucht?

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
0
kaiser