web-dev-qa-db-fra.com

Vérifier si l'utilisateur actuel est administrateur dans wordpress

Je développe un plugin pour wordpress, je veux savoir si l'utilisateur actuel est administrateur ou non. Malheureusement, je ne pouvais pas utiliser current_user_can () car cela me donnait une erreur, donc j'utilise le global $ current_user. Mais je ne pouvais pas entrer dans la partie if même pour un utilisateur administrateur. Comment résoudre ce problème?

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

Essayez quelque chose comme ce qui suit:

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

En savoir plus sur la fonction current_user_canhere .

43
Sugato

Obtenez l'utilisateur et vérifiez s'il a le rôle administrateur, comme ceci:

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

Cela fonctionne pour moi:

  global $current_user;

  if( !empty($current_user->roles) ){
    foreach ($current_user->roles as $key => $value) {
      if( $value == 'administrator' ){
        Do Something
      }
    }
  }

S'il ne s'agit pas d'une configuration multi-site, vous pouvez l'utiliser pour détecter un administrateur. S'il s'agit de sites multiples, cela ne sera vrai que pour un super administrateur.

  $user_ID = get_current_user_id();
  if($user_ID && is_super_admin( $user_id )) {
    Do Something
  }
7
codewaggle

Je sais que c’est une vieille question, mais j’aimerais rendre cette page plus utile en abordant le problème. Le problème actuel est que OP n'a pas été en mesure d'utiliser current_user_can( 'manage_options' ) dans son plugin. L'utilisation de la fonction soulève l'erreur habituelle undefined function... PHP. Cela se produit car le plug-in est initialisé avant le chargement du noyau WP. La solution est très simple. Le chargement du plugin au moment opportun est la clé. 

En supposant que le code du plug-in admin réside dans une classe MyPlugin, l'initialisation de la classe doit être connectée à init. Voici une façon de le faire. 

/**
 * 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();
});

C'est un moyen de s'assurer que Wordpress Core est disponible pour la fonction plug-in. 

Vous pouvez trouver admin_init documentation ici

P.S. Vous devriez envisager d'utiliser PHP HEREDOC . C'est un moyen très simple d'écrire des chaînes multi-lignes. Votre bloc de style peut être ré-écrit comme suit 

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

J'espère que ça aide quelqu'un.

Merci. 

6
Ejaz

Trop tard pour une réponse à cette question, mais je pense que cela pourrait être utile si quelqu'un finissait comme moi.

J'avais besoin d'une solution rapide à ce problème - vérifiez si l'utilisateur actuel est admin ou non.

Depuis le WP codex j’ai une solution simple qui consiste à utiliser ..

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

Selon WP-Codex, cette fonction renvoie True si l'utilisateur actuellement connecté est l'administrateur réseau (super). Cette fonction renvoie True même si le mode réseau est désactivé mais que l'utilisateur actuel est admin.

3
miyaneha

utiliser ce code, j'espère que cela résoudra votre problème

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

Testé et ça marche bien

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