Я разрабатываю плагин для wordpress, я хочу найти, является ли текущий пользователь администратором или нет, к сожалению, я не мог использовать current_user_can (), поскольку он дает мне ошибку, поэтому я использую глобальный $ current_user. Но я не мог попасть внутрь части if даже для пользователя admin. Как это исправить?
global $current_user; if ($current_user->role[0]=='administrator'){ function hide_post_page_options() { //global $post; // Set the display css property to none for add category and add tag functions $hide_post_options = "<style type=\"text/css\"> .jaxtag { display: none; } #category-adder { display: none; } </style>"; print($hide_post_options); } add_action( 'admin_head', 'hide_post_page_options' ); }
Попробуйте следующее:
if ( current_user_can( 'manage_options' ) ) { /* A user with admin privileges */ } else { /* A user without admin privileges */ }
Источник: http://codex.wordpress.org/Function_Reference/current_user_can
Получите пользователя и проверьте, имеет ли он роль администратора, например:
function isSiteAdmin(){ return in_array('administrator', wp_get_current_user()->roles); } if( isSiteAdmin() ){ echo 'Woot Woot'; } else { echo 'So sad, I have no rights'; }
Это работает для меня:
global $current_user; if( !empty($current_user->roles) ){ foreach ($current_user->roles as $key => $value) { if( $value == 'administrator' ){ Do Something } } }
Если это не настройка нескольких сайтов, вы можете использовать это для обнаружения администратора. Если это многосайтовый сайт, это вернет true только для супер администратора.
$user_ID = get_current_user_id(); if($user_ID && is_super_admin( $user_id )) { Do Something }
Я знаю, что это старый вопрос, но я хотел бы сделать эту страницу более полезной, обратившись к актуальной проблеме. Фактическая проблема здесь в том, что OP не смог использовать current_user_can( 'manage_options' )
в своем плагине. Использование функции повышает обычную undefined function...
Ошибка PHP. Это происходит потому, что плагин инициализируется до завершения загрузки ядра WP. Исправление очень простое. Загрузка плагина в соответствующее время – это ключ.
Предполагая, что код плагина администратора находится внутри класса MyPlugin
, инициализацию класса следует подключить к init
. Следующим является один из способов сделать это.
/** * Plugin Class */ class MyPlugin{ public function __construct(){ /* all hooks and initialization stuff here */ /* only hook if user has appropriate permissions */ if(current_user_can('manage_options')){ add_action( 'admin_head', array($this, 'hide_post_page_options')); } } function hide_post_page_options() { // Set the display css property to none for add category and add tag functions $hide_post_options = " <style type=\"text/css\"> .jaxtag { display: none; } #category-adder { display: none; } </style>"; print($hide_post_options); } } add_action('admin_init', function(){ $myplugin = new MyPlugin(); });
Это способ убедиться, что ядро wordpress доступно для функции плагина.
Здесь вы можете найти документацию admin_init
.
PS Вы должны изучить использование PHP HEREDOC . Это очень простой способ написания многострочных строк. Ваш блок стиля можно переписать следующим образом
$hide_post_options = <<<HTML <style type="text/css"> .jaxtag { display: none; } #category-adder { display: none; } </style> HTML;
Надеюсь, это поможет кому-то.
Благодарю.
используйте этот код, я надеюсь, что это решит вашу проблему
global $current_user; $user_roles = $current_user->roles; $user_role = array_shift($user_roles); echo trim($user_role);
Слишком поздно для ответа на этот вопрос, но я думаю, что это может быть полезно, если кто-то окажется здесь, как я.
Мне нужно быстрое решение этой проблемы – проверьте, является ли текущий пользователь администратором или нет.
Из WP-кода я получил простое решение, которое нужно использовать.
if(is_super_admin($user_id)) { // do stuff for the admin user... }
В соответствии с WP-Codex эта функция возвращает значение True, если в настоящий момент вошедший в систему пользователь является сетевым (супер) администратором. Эта функция возвращает True, даже если сетевой режим отключен, но текущий пользователь является администратором .
Протестировано и отлично работает
if(current_user_can('administrator') ) { echo 'ok' ; }else{ echo 'out' ; }
$user=wp_get_current_user(); if(in_array("administrator", $user->roles)){ //user role is admin }