Show menu in sidebar if on specific page AND specific user role (is_page, current_user_can)

admin2025-04-19  0

I tried combining two conditions: is_page and current_user_can but it didn't work.

Found an example at StackExchange where the user role was spelled out. But the Wordpress codex says "Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly." On the same page, this link is included for reference/further reading: /

I tried adapting that code, and added this to my functions.php

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 );
}

Then, here's what I put in the sidebar.php file:

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

Still not working. What am I missing? Is it because it's in the sidebar?


I prefer to spell out the role - not specify user capabilities - because my 5 custom user roles have exactly the same capabilities, but I restrict pages based on the role. (Hacky workaround: I could add custom capabilities to each role, but that seems like a strange way of doing it....)

I tried combining two conditions: is_page and current_user_can but it didn't work.

Found an example at StackExchange where the user role was spelled out. But the Wordpress codex says "Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly." On the same page, this link is included for reference/further reading: http://docs.appthemes/tutorials/wordpress-check-user-role-function/

I tried adapting that code, and added this to my functions.php

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 );
}

Then, here's what I put in the sidebar.php file:

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

Still not working. What am I missing? Is it because it's in the sidebar?


I prefer to spell out the role - not specify user capabilities - because my 5 custom user roles have exactly the same capabilities, but I restrict pages based on the role. (Hacky workaround: I could add custom capabilities to each role, but that seems like a strange way of doing it....)

Share Improve this question asked Mar 21, 2014 at 2:21 PhantasmixPhantasmix 1501 silver badge15 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Changed the code in functions.php to this:

function get_user_role() {
global $current_user;

$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);

return $user_role;
}

And in the sidebar.php:

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

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

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

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1745071622a283317.html

最新回复(0)