Wordpress根据角色限制对管理区域的访问

时间:2013-10-26 10:26:07

标签: php wordpress

尝试根据wordpress 3.6中的角色限制对管理区域的访问

尝试以下方法。这可以防止任何没有管理员访问但没有我自定义角色“超级用户”的人。这会保持重定向到主页。

function prevent_admin_access()
{
if ( false !== strpos( strtolower( $_SERVER['REQUEST_URI'] ), '/wp-admin' ) && !current_user_can( 'administrator' ) && !current_user_can( 'Super User' ) )
wp_redirect( home_url() );
}
add_action( 'init', 'prevent_admin_access', 0 );

1 个答案:

答案 0 :(得分:1)

使用add_role()添加新角色时您(或插件)定义“角色名称”和“显示角色名称”(http://codex.wordpress.org/Function_Reference/add_role)。

current_user_can()采用名称,而不是显示名称,即“区分大小写,并且应全部为小写”(请参阅​​http://codex.wordpress.org/Function_Reference/current_user_can

在你的情况下,我猜这将是

... && !current_user_can( 'super_user' ) ...

修改

直到现在我才发现你正在将角色传递给current_user_can()。这将起作用(至少在WP 3.6中),但不要这样做。

来自文档(上面的链接):

  

不要将角色名称传递给current_user_can(),因为这不能保证正常工作(请参阅#22624)。相反,您可能希望尝试AppThemes放在一起的check user role function

我建议你使用只有管理员和你的超级用户才有的功能,可能是update_core或类似的东西。