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' );
}
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_can
here .
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';
}
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
}
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.
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.
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);
Testé et ça marche bien
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
}