【问题标题】:Different menus for different user roles不同用户角色的不同菜单
【发布时间】:2014-03-06 14:39:16
【问题描述】:

我正在尝试根据用户角色显示两个不同的菜单。

我已经使用此代码(在functions.php中)设置了一个名为“客户”的新角色:

add_role( 'client', 'Client', array(
    'read' => true,
 ) 
);

我有两个不同的菜单使用这个代码(在functions.php中):

function register_my_menus() {
  register_nav_menus(
    array(
  'client-navigation' => __( 'Client Navigation' ),
  'staff-navigation' => __( 'Staff Navigation' ),

    )
  );
}
add_action( 'init', 'register_my_menus' );

这是我试图用来调用客户端导航或员工导航的代码(在 header.php 中):

<?php
        if (current_user_can('client')){
            //menu for client role
             wp_nav_menu( array('theme-location' => 'client-navigation' ));

        }else{
            //default menu
             wp_nav_menu( array('theme-location' => 'staff-navigation' ));
        }
?>

我还尝试在 wp_nav_menu 之前添加“echo”并将 theme-location 更改为 menu 并使用菜单名称,但它始终显示 staff-navigation 菜单。

【问题讨论】:

  • 你能解释一下什么不起作用吗?你没看到菜单吗?两次相同的菜单?您是否在两个菜单中都添加了菜单项?您是否以客户身份登录?我相信current_user_can 接受的是能力而不是角色。
  • 不,它总是显示人员导航菜单,我在每个菜单中有不同的链接,我使用两个浏览器(1 个管理员登录和 1 个客户端登录)进行测试

标签: php wordpress if-statement wordpress-theming


【解决方案1】:

要使用current_user_can,您应该添加自己的custom capability

不这样做,当你在寻找角色时,下面的函数,适应 from here 就可以了:

function check_for_clients() {
    global $current_user;

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

    return ($user_role == 'client');
}

然后在你的 header.php 文件中(注意你有一个typo in theme_location):

if ( check_for_clients() ){
     wp_nav_menu( array('theme_location' => 'client-navigation' ));

} else {
     wp_nav_menu( array('theme_location' => 'staff-navigation' ));
}

【讨论】:

  • 感谢 b,这可以正确检查用户现在是否是客户,但它仍在为客户和员工加载相同的菜单。
  • 尼克,这是您代码中的拼写错误,请参阅更新后的答案。
猜你喜欢
  • 2016-01-16
  • 1970-01-01
  • 2022-01-13
  • 2012-09-06
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多