29

我正在为 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'  );
}
4

8 回答 8

52

尝试以下操作:

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

在此处阅读有关该current_user_can功能的更多信息。

于 2013-11-06T06:44:56.040 回答
30

获取用户并检查它是否具有管理员角色,如下所示:

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';
}
于 2014-01-24T11:39:19.087 回答
10

这对我有用:

  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
  }
于 2013-12-12T10:31:53.367 回答
7

我知道这是一个老问题,但我想通过解决实际问题使这个页面更有用。这里的实际问题是 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;

我希望它可以帮助某人。

谢谢。

于 2016-02-13T04:50:06.567 回答
6

回答这个问题为时已晚,但我认为如果有人像我这样最终来到这里,它可能还是有用的。

我需要一个快速解决这个问题的方法——检查当前用户是否是管理员。

WP codex我得到了一个简单的解决方案,即使用..

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

根据 WP-Codex,如果当前登录的用户是网络(超级)管理员,则此函数返回 True。即使网络模式被禁用但当前用户是 admin ,此函数也会返回 True

于 2016-10-17T03:42:17.957 回答
4
<?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 中的管理员还是编辑器

于 2020-04-28T17:46:51.537 回答
3

使用此代码,我希望这可以解决您的问题

global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
echo trim($user_role);
于 2013-11-06T06:35:27.050 回答
0
$user=wp_get_current_user();
if(in_array("administrator", $user->roles)){
  //user role is admin
}
于 2017-11-14T12:08:36.697 回答