如何根据用户角色将类应用于自定义菜单项

时间:2011-07-19 作者:Zach Shallbetter

我的网站上有一个“成员”部分,他们可以看到特定的自定义菜单项。我正在寻找一种简单地在<li> 基于它的权限级别和用户的角色。

具有某种效果的东西。

if( current_user_can(\'integrator\') || current_user_can(\'distributor\')) :
这就是我到目前为止所拥有的,如果用户的角色是(无论什么),它会对每个菜单项应用一个类。如果存在另一个类,并且用户的角色是(无论什么),我基本上需要应用该类。。。

add_filter(\'nav_menu_css_class\' , \'my_nav_special_class\' , 10 , 2);
function my_nav_special_class($classes, $item){
        if (current_user_can(\'integrator\') || current_user_can(\'distributor\')){
            $classes[] = \'PARTNER_STAR\';
        }
    return $classes;
}
礼节性Bainternet 从…起this post

如有任何想法,将不胜感激

Update: 我还想指出,我正在使用“Role Scoper“”来处理权限。它们确实具有模板功能is_restricted_rs() 但我真的不知道目前该如何使用它。

3 个回复
最合适的回答,由SO网友:Ryan Gibbons 整理而成

回答您的问题“如果存在另一个类,并且用户的角色是(无论什么),则需要应用该类”

最简单的方法是这样做,不是在代码中,而是在CSS中。可以将具有多个once类的元素作为目标。所以,使用你的类PARTNER_STAR 如果你的另一门课是说another 你可以让你的css

.another { /* targets all elements with another set */ }
.PARTNER_STAR { /* targets all elements with PARTNER_STAR set */ }
.another.PARTNER_STAR { /* targets elements that have BOTH PARTNER_STAR and another set */ }
结合@robertwbradford的思想,您可以只设置一个父元素,而不需要在每个元素上都设置它。如果您有多个角色,只需要一种样式,那么您仍然可以使用If语句,只需将css应用于高级父元素即可。

.PARTNER_STAR .another { /* targets all elements with another inside PARTNER_STAR */ }

SO网友:robertwbradford

您可以将类添加到包装器中,而不是直接将类添加到li元素中。或者,为什么不使用body标记,以便它可以用于多个元素?类似于:

# functions.php
function user_role_class() {
  // Some code here to return a string containing the user\'s role(s).
  // Perhaps see http://codex.wordpress.org/Function_Reference/get_role as a start?
}

# header.php
...
<body <?php body_class(user_role_class()); ?>>
...
然后在样式表中,类似这样的内容:

# style.css
ul.menu{/*default menu formatting here*/}
body.integrator ul.menu{/*role-specific menu formatting here*/}
这种样式非常强大,因为它可以真正减少整个代码所需的类的数量。

SO网友:Pippin

尝试添加global $current_user; get_currentuserinfo(); 到您的功能顶部。

结束

相关推荐

List all sidebars in metabox

我正在尝试添加一个元框来选择每页的侧边栏。为了创建我使用的元数据库this class施工相当简单:$meta_boxes[] = array( \'id\' => \'sidebars_side\', \'title\' => \'Page Sidebar\', \'pages\' => array(\'page\', \'post\'), \'context\' => \'side\', \'pri