我的网站上有一个“成员”部分,他们可以看到特定的自定义菜单项。我正在寻找一种简单地在<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()
但我真的不知道目前该如何使用它。
最合适的回答,由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*/}
这种样式非常强大,因为它可以真正减少整个代码所需的类的数量。