1 回答
TA贡献1808条经验 获得超4个赞
所以这里有 3 组条件,如果其中任何一个条件为真,则访问被拒绝。
对于您的第二个和第三个条件,您的问题说您正在使用,(a || b) && c但事实并非如此。你正在与之合作,(!a || !b) && c这是一件非常不同的事情。想想OR和的组合是什么NOT意思。两个条件都被评估,其中一个为真导致条件为真。
因此,当您检查是否是管理员时NOT editor OR NOT administrator,条件评估为真,因为他们是NOT编辑者。您想用它AND来检查两个条件是否都为真。检查管理员的NOT editor AND NOT administrator评估结果为 false。
function restrict_access() {
//pages for admins
$admin_pages = is_page(array('veiledning-administrator', 'database'));
//pages for redaktør
$redaktor_pages = is_page(array('veiledning-redaktor'));
//pages for moderators
$mod_pages = is_page(array(''));
//users forum role
$forum_role = bbp_get_user_display_role( get_current_user_id() );
if(
(!current_user_can('administrator') && $admin_pages) ||
(!current_user_can('editor') && !current_user_can('administrator') && $redaktor_pages) ||
($forum_role != 'moderator' && !current_user_can('administrator') && $mod_pages)
) {
wp_redirect('/');
exit;
}
}
请注意,&&具有更高的优先级,||因此您在此处获得的额外括号是隐含且不必要的。但我发现无论如何最好明确包含它们。
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报