web-dev-qa-db-fra.com

Restreindre l'accès administrateur à certaines pages pour certains utilisateurs

Comme le titre l'indique, j'aimerais limiter l'accès principal à certaines pages pour certains utilisateurs.

En réalisant un site de 45 à 50 pages, j'ai compris que l'expérience utilisateur serait bien meilleure si le menu Page ne répertoriait que les pages que l'utilisateur pouvait modifier/mettre à jour.

J'ai essayé les plugins ci-dessous en vain. Advanced Access Manager a la fonctionnalité mais ne fonctionne pas/est défectueux sur la version 3.5.1.

http://wordpress.org/extend/plugins/advanced-access-managerhttp://wordpress.org/extend/plugins/role-scoperhttp://wordpress.org/ extend/plugins/adminimizehttp://wordpress.org/extend/plugins/s2member

Extrait de code dans functions.php?

4
BoBoz

Ce code semble bien fonctionner pour moi (dans functions.php):

add_filter( 'parse_query', 'exclude_pages_from_admin' );

$user_id = get_current_user_id();

if ($user_id == 2) {
    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'] = array('123','234','345');
        }
    }
}
5
BoBoz

Cela ne me laissera pas de commentaire, alors j'ajoute ceci comme nouvelle réponse.

L'erreur:

Avertissement: "call_user_func_array () s'attend à ce que le paramètre 1 soit un rappel valide,> fonction 'exclude_pages_from_admin' introuvable ou nom de fonction non valide".

... est due à l'appel de la fonction uniquement après vérification de l'ID utilisateur. Ainsi, si vous êtes connecté PAS en tant qu'utilisateur, la fonction n'existe pas et le filtre renvoie cette erreur car il recherche la fonction mais ne la trouve pas.

Donc ça devrait être:

add_filter( 'parse_query', 'exclude_pages_from_admin' );

function exclude_pages_from_admin($query) {
    $user_id = get_current_user_id();

    if ($user_id == 2) {
    global $pagenow,$post_type;
     if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
     }
    }
}
2
ben_jamin