Ответ 1
Попробуйте следующее:
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
Я разрабатываю плагин для 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
документацию здесь.
P.S. Вы должны изучить 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 codex У меня есть простое решение, которое нужно использовать.
if(is_super_admin($user_id)) {
// do stuff for the admin user...
}
В соответствии с WP-Codex эта функция возвращает значение True, если текущий пользователь в настоящий момент является сетевым (супер) администратором. Эта функция возвращает True, даже если сетевой режим отключен, но текущий пользователь - admin.
Протестировано и отлично работает
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
}