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

Я разрабатываю плагин для WordPress, я хочу выяснить, является ли текущий пользователь администратором или нет, к сожалению, я не смог использовать current_user_can(), так как он выдает ошибку, поэтому я использую глобальный $current_user. Но я не смог попасть внутрь части if даже для администратора. Как это исправить?

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'  );
}

8 ответов

Попробуйте что-то вроде следующего:

if ( current_user_can( 'manage_options' ) ) {
    /* A user with admin privileges */
} else {
    /* A user without admin privileges */
}

Узнайте больше о current_user_can функционировать здесь.

Получите пользователя и проверьте, есть ли у него роль администратора, вот так:

function is_site_admin(){
    return in_array('administrator',  wp_get_current_user()->roles);
}

if (is_site_admin()) {
  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;

Надеюсь, это кому-нибудь поможет.

Благодарю.

<?php

if( current_user_can( 'administrator' ) ){} // only if administrator
if( current_user_can( 'editor' ) ){} // only if editor
if( current_user_can( 'author' ) ){} // only if author
if( current_user_can( 'contributor' ) ){} // only if contributor
if( current_user_can( 'subscriber' ) ){} // only if subscriber

?>

Подробнее здесь: Как проверить, является ли пользователь администратором или редактором в WordPress

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

Мне нужно было быстрое решение этой проблемы - проверьте, является ли текущий пользователь администратором или нет.

Из кодекса WP я получил простое решение, которое заключается в использовании..

if(is_super_admin($user_id)) {
  // do stuff for the admin user...
}

Согласно WP-Codex, эта функция возвращает True, если в данный момент зарегистрированный пользователь является сетевым (супер) администратором. Эта функция возвращает True, даже если сетевой режим отключен, но текущий пользователь является администратором.

Используйте этот код, я надеюсь, что это решит вашу проблему

global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
echo trim($user_role);

Протестировано и работает нормально

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
}
Другие вопросы по тегам