Проверьте, является ли текущий пользователь администратором в WordPress

Я разрабатываю плагин для 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 }