Menü in der Seitenleiste anzeigen, wenn auf einer bestimmten Seite UND einer bestimmten Benutzerrolle (is_page, current_user_can)

Ich habe versucht, zwei Bedingungen zu kombinieren: is_page und current_user_can, aber es hat nicht funktioniert.

Bei StackExchange wurde ein Beispiel gefunden, in dem die Benutzerrolle angegeben wurde. Aber der WordPress-Codex sagt “Übergeben Sie keinen Rollennamen an current_user_can (), da dies nicht garantiert, dass es korrekt funktioniert.” Auf der gleichen Seite ist dieser Link als Referenz / weitere Informationen enthalten: http://docs.appthemes.com/tutorials/wordpress-check-user-role-function/

Ich habe versucht, diesen Code anzupassen, und fügte dies meiner functions.php hinzu

function plastics_check_user_role( $role, $user_id = null ) { if ( is_numeric( $user_id ) ) $user = get_userdata( $user_id ); else $user = wp_get_current_user(); if ( empty( $user ) ) return false; return in_array( $role, (array) $user->roles ); } 

Dann, hier ist, was ich in die Datei sidebar.php gesetzt habe:

 <?php if (is_page(array('page1')) && plastics_check_user_role('Administrator')) : echo '
Title 1
' . wp_nav_menu(array('theme_location'=>'menu1' )); elseif (is_page(array('page2'))) : echo '
Page 2
' . wp_nav_menu(array('theme_location'=>'menu2' )); elseif (is_page(array('page 3'))) : echo '
Page 3
' . wp_nav_menu(array('theme_location'=>'menu3' )); endif; ?>

functioniert immer noch nicht. Was vermisse ich? Liegt es daran, dass es in der Seitenleiste ist?


Ich bevorzuge es, die Rolle zu buchstabieren – keine Benutzerfunktionen anzugeben, weil meine 5 benutzerdefinierten Benutzerrollen genau die gleichen functionen haben, aber ich schränke Seiten basierend auf der Rolle ein. (Hacky Workaround: Ich könnte jeder Rolle benutzerdefinierte functionen hinzufügen, aber das scheint eine seltsame Art, es zu tun ….)

Solutions Collecting From Web of "Menü in der Seitenleiste anzeigen, wenn auf einer bestimmten Seite UND einer bestimmten Benutzerrolle (is_page, current_user_can)"

Der Code in functions.php wurde folgendermaßen geändert:

 function get_user_role() { global $current_user; $user_roles = $current_user->roles; $user_role = array_shift($user_roles); return $user_role; } 

Und in der Sidebar.php:

 < ?php if (is_page(array('page1')) && get_user_role('Administrator')) : echo '
Title 1' . wp_nav_menu(array('theme_location'=>'menu1' )); elseif (is_page(array('page2'))) : echo '
Page 2
' . wp_nav_menu(array('theme_location'=>'menu2' )); elseif (is_page(array('page 3'))) : echo '
Page 3
' . wp_nav_menu(array('theme_location'=>'menu3' )); endif; ?>

Quellen: https://stackoverflow.com/questions/1458362/how-to-get-the-currently-logged-in-users-role-in-wordpress

http://wordpress.org/support/topic/how-to-get-the-current-logged-in-users-role?replies=10#post-1600295