web-dev-qa-db-ja.com

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

次のようなものを試してください:

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

current_user_can関数について詳しく読む here

48
Gogol

ユーザーを取得し、次のようにロール管理者がいることを確認します。

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';
}
20
Tosh

これは私のために働く:

  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
  }
10
codewaggle

これは古い質問ですが、実際の問題に対処することでこのページをより便利にしたいと思います。ここでの実際の問題は、OPがプラグインでcurrent_user_can( 'manage_options' )を使用できなかったことです。関数を使用すると、通常のundefined function... PHPエラー。これは、プラグインがWPコアの読み込みが完了する前に初期化されるために発生します。修正は非常に簡単です。適切な時間にプラグインを読み込むことが重要です。

AdminプラグインコードがクラスMyPlugin内にあると仮定すると、クラスの初期化はinitにフックされる必要があります。以下はoneの方法です。

/**
 * 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 coreがプラグイン関数で利用可能であることを確認する方法です。

発見できる admin_initドキュメント こちら

追伸 PHP HEREDOC の使用を検討する必要があります。これは、複数行の文字列を記述する非常に簡単な方法です。スタイルブロックは次のように書き直すことができます

$hide_post_options = <<<HTML
<style type="text/css"> 
    .jaxtag { display: none; } 
    #category-adder { display: none; }
</style>
HTML;

私はそれが誰かを助けることを願っています。

ありがとう。

6
Ejaz

この質問への回答には遅すぎますが、私のように誰かがここにいれば、とにかく役立つと思います。

この問題の簡単な解決策が必要でした。現在のユーザーが管理者かどうかを確認してください。

WP codex から、使用する簡単な解決策を得ました。

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

WP-Codexによると、現在ログインしているユーザーがネットワーク(スーパー)管理者である場合、この関数はTrueを返します。 この関数は、ネットワークモードが無効になっているが、現在のユーザーがadminであってもTrueを返します。

4
miyaneha

このコードを使用して、これがあなたの問題を解決することを願っています

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

テスト済みで正常に動作

if(current_user_can('administrator') ) {
   echo 'ok' ;
}else{
   echo 'out' ;
}
0
Ulrich Dohou
$user=wp_get_current_user();
if(in_array("administrator", $user->roles)){
  //user role is admin
}
0
Brad