web-dev-qa-db-fra.com

Masquer les pages en fonction du rôle

J'ai essayé de trouver un moyen d'empêcher l'utilisateur de voir certaines pages dans le menu "Pages" du panneau d'administration.

J'ai regardé dans le fichier edit.php et remarqué:

} elseif ( 'page' == $post_type ) {

Cependant, je ne suis pas sûr de ce que je dois éditer pour afficher certaines pages et en masquer d'autres en fonction du rôle.

L'administrateur pourra voir tous les messages.

Le SubAdmin ne pourra voir que certaines pages.

Comment puis-je éditer le fichier edit.php (ou un autre fichier php) afin de le faire?

1
StealthRT

Pour obtenir le rôle actuel de l'utilisateur

$current_user = wp_get_current_user();
if ( !($current_user instanceof WP_User) )
   return;
$roles = $current_user->roles;  //$roles is an array

Après avoir obtenu les identifiants de page d'ensemble de rôles que vous souhaitez afficher en fonction des rôles (par exemple)

    if($roles=='administrator'){
     $args=array('21','22','23');
    }

   or

   if($roles=='subscriber'){
     $args=array('24','25','26');
    }

vous pouvez utiliser le crochet de filtre parse_query pour exclure vos pages à l'aide de l'attribut post__not_in

add_filter( 'parse_query', 'exclude_pages_from_admin' );
function exclude_pages_from_admin($query) {
    global $pagenow,$post_type;
    if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = $args
    }
}

Liens importants:

2
Ravinder Kumar