web-dev-qa-db-fra.com

Autoriser uniquement les administrateurs et les éditeurs à accéder à wp-admin

J'essaie de restreindre l'accès à wp-admin afin que seuls les administrateurs et les éditeurs soient autorisés. Pour le moment, j'utilise cette fonction:

function restrict_admin(){
    //if not administrator, kill WordPress execution and provide a message
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __('You are not allowed to access this part of the site') );
    }
}
add_action( 'admin_init', 'restrict_admin', 1 );

Mais cela ne fonctionne que pour l'administrateur; les éditeurs ne sont pas autorisés à accéder à cette partie du site. Que puis-je faire?

4
user2358350

Vous avez raison de dire que vous devriez vérifier votre capacité. Cependant, les options de gestion ne sont données aux administrateurs que par défaut. Vous devez vérifier une fonctionnalité des éditeurs et des administrateurs, telle que delete_others_posts.

function restrict_admin(){
//if not administrator, kill WordPress execution and provide a message
    if ( ! current_user_can( 'delete_others_posts' ) ) {
        wp_die( __('You are not allowed to access this part of the site') );
    }
}
add_action( 'admin_init', 'restrict_admin', 1 );

Voir rôles et capacités à partir du codex.

3
Andrew Bartel

Vous pouvez également utiliser ceci:

<?php if( current_user_can('editor') || current_user_can('administrator') ) {  ?> 
    // stuff here for admins or editors
<?php } ?>

Pour une référence détaillée, cochez cette autre thread sur la pile.

Merci

0
Vee

Pour moi, étant donné que les noms de rôle de passage de codex à current_user_can () sont déconseillés car leur fonctionnement correct n'est pas garanti (voir # 22624 ), la meilleure option est quelque chose comme ça.

$user = wp_get_current_user();
$allowed_roles = array('administrator','editor');

if(array_intersect($allowed_roles, $user->roles)){
    //user have $allowed_roles
}
0
mokiSRB