2013-10-26 5 views
1

Пытается ограничить доступ к административной области на основе роли в wordpress 3.6Wordpress Ограничение доступа к области администратора на основе роли

Пробовал следующее. Это предотвращает доступ любого пользователя без доступа администратора, но не мою пользовательскую роль «Суперпользователь». Это приведет к перенаправлению на главную страницу.

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); 
+0

Исправлена ​​роль «суперпользователя», в которой подчеркивалось подчеркивание в середине - ему не понравилось пространство – user2903829

+1

см. Мой ответ о том, почему вы не должны этого делать – frnhr

ответ

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') ... 

EDIT:

Только теперь я вижу, что вы передаете роль вместо capatibility на current_user_can(). Это будет работать (по крайней мере, в WP 3.6), но не делайте этого.

Из документов (ссылки выше):

Не передать имя роли в current_user_can(), так как это не гарантирует правильной работы (см #22624). Вместо этого вы можете попробовать check user role function, созданный AppThemes.

Я бы предположил, что вы используете некоторые возможности, которыми обладают только администраторы и ваши суперпользователи, возможно update_core или что-то подобное.

Смежные вопросы