Pierre

23 septembre 2015
w

Des questions ?

Besoin de prendre contact, de présenter votre projet ?

w

Contactez-moi !

Je serai heureux de répondre à toutes vos questions.

Contact

Exclure certaines pages de l’interface d’administration de WordPress sauf pour un utilisateur donné

Codage | 11 commentaires

Une méthode simple pour protéger certains articles ou pages dans l'interface d'administration de WordPress
WordPress

Quand on livre un site à un client, il y a certaines pages qui contiennent ce que l’on appelle couramment des « tags » (des particularités qu’on traite en back-office, des mises en formes particulières, des shortcodes ou encore des « fonctions ») qui ne doivent PAS être modifiées sous peine de « bugs » d’affichage ou de rendu.

Cette ou ces pages, donc, n’ont aucun intérêt à figurer dans la liste des documents à éditer. On peut aussi, pour une raison x ou y, vouloir un masquer un ou plusieurs articles. Je l’ai donc ajouter dans le code ci-dessous.

Le code :

function exclude_from_admin($query) {
global $user_ID, $pagenow, $post_type;
   $the_id = get_queried_object_id();
   $exclude_posts = array(1725); /* id(s) des posts à cacher */
   $exclude_pages = array(186); /* id(s) des pages à cacher */
   $exclude_mix = array_merge($exclude_posts, $exclude_pages);
   $user_can = ($user_ID==1) ? true : false;
   if ( ! is_admin() && !$user_can ) {
      if( in_array($the_id, $exclude_mix) ) add_action( 'admin_bar_menu', 'remove_edit_node', 99 );
      return $query;
   }
   if ( !$user_can && $pagenow == 'edit.php') {
      if($post_type == 'page' )
         $query->query_vars['post__not_in'] = $exclude_pages;
      elseif ($post_type == 'post' )
         $query->query_vars['post__not_in'] = $exclude_posts;
   }
}
add_filter( 'parse_query', 'exclude_from_admin' );
function remove_edit_node( $wp_admin_bar ) {
   $wp_admin_bar->remove_node( 'edit' );
}

L’utilisation :

  • ajouter le code ci-dessus dans le fichier « functions.php » de votre thème (ou thème enfant),
  • dans la variable « $exclude_posts » entrez, séparés par des virgules, les id des articles que vous souhaitez masquer dans l’interface d’administration de WordPress.
  • Dans la variable « $exclude_pages » entrez, séparés par des virgules, les id des pages que vous souhaitez masquer dans l’interface d’administration de WordPress.

Pour connaître ces fameux « id« , rien de plus facile. Dans la liste des articles à modifier placez-vous au-dessus du lien « Modifier » pour celui qui vous intéresse, vous verrez dans la barre d’état de votre navigateur un lien sous la forme :
https://www.domain.tld/wp-admin/post.php?post=1249&action=edit
Notez tous les « id » que vous souhaitez masquer, reproduisez la même chose avec les pages et ajoutez ces listes dans votre fichier « functions.php » comme indiqué ci-dessus.

Dans un prochain article, nous verrons comment laisser la possibilité aux utilisateurs du site de modifier ces pages « sensibles » mais en les informant qu’ils doivent prendre des précautions en les manipulant 🙂 …

Information : Utilisateur convaincu depuis de nombreuses années par ce thème, je suis inscrit en tant qu’affilié sur le site d’elegant themes. Ainsi en cliquant sur le logo ci-dessous, vous bénéficierez d’une remise de 10% sur l’achat du thème et si vous l’achetez, je recevrai une commission :).

11 Commentaires

  1. Parfait, merci beaucoup pour cette astuce !!

  2. Auriez-vous une petite astuce supplémentaire pour que la personne qui ne voit pas tout, ne voit pas non plus le nombre de page entre parenthèses dans les Tous, Publiés, Brouillons, Contenu Cornestone ?
    Merci 🙂

    • Re-Bonjour Carole :).
      Attention non-testé mais peut-être qu’un simple :
      wp_add_inline_style( 'hide-count', '.subsubsub .count { display: none; }' );
      juste après
      if ( !$user_can && $pagenow == 'edit.php') {
      pourra faire l’affaire :)…
      En attendant ta confirmation, je te souhaite une belle journée.

      Amicalement,

      Pierre.

      • Bonjour Pierre,
        Tous mes voeux pour cette nouvelle année.

        Cela ne fonctionne pas pour cacher ces compteurs.

        Par contre, comment pourrais-je modifier la « couleur » de ce compteur ?
        Si je le passe à f1f1f1 il sera de la couleur de l’arrière plan,, donc on ne le verra pas.
        Pour avoir :
        .subsubsub a .count, .subsubsub a.current .count {
        color:
        #f1f1f1;
        font-weight: 400;
        }

        Merci

      • Bonjour Pierre,
        Tous mes voeux pour cette nouvelle année (et désolée pour la réponse aussi tardive…).
        Cela ne fonctionne pas.
        Aurais-tu un moyen de changer la couleur de ce compteur (xx) pour le passer en #f1f1f1 (comme la couleur de fond du bandeau) ?
        Merci d’avance
        Amicalement

      • Bonjour Pierre,
        Désolée, je pense que tu ne souhaites pas répondre à mon message aussi tardif, et je le comprends sans souci.
        J’ai trouvé une solution en modifiant le css.
        Merci encore.

      • Bonjour Carole :).

        Non désolé, je suis charrette en ce moment :)…
        Content que tu es pu trouver une solution.

        Amicalement,

        Pierre.

  3. Bonjour,
    Merci pour le code, mais vous n’indiquez pas comment exclure certaines pages de l’interface d’administration de WordPress « sauf pour un utilisateur donné ».
    Comment dire que toto (moi l’administrateur du site) voit tout ?
    Merci.

    • Bonjour Carole :).
      Pour qu’un ou plusieurs utilisateurs puisse voir la(es) page(s) ou l(es)’article(s) en back-office, il faut indiquer leur(s) ID(s).
      Par exemple pour autoriser l’utilisateur Toto dont l’ID est 34 et l’utilisateur Tata dont l’ID est 22 il faut modifier cette ligne :
      $user_can = ($user_ID==1) ? true : false;
      en écrivant ceci :
      $user_can = ($user_ID==22 || $user_ID==34) ? true : false;
      Ainsi ces 2 utilisateurs pourront voir et modifier les pages et articles masqués ;).

      Amicalement,

      Pierre.

      • Bonjour Pierre et merci pour votre réponse.
        Je pensais recevoir un mail automatique me disant que vous aviez répondu, donc, désolée, je pensais que vous m’aviez oubliée 😀
        Merci beaucoup, cela fonctionne très bien, vous devriez transformer cela en plugin (et pourquoi pas le vendre).
        Amicalement,
        Carole

      • Bonjour Carole :).

        Non désolé pas de mail automatique :)…
        Je suis ravi que tu aies réussi à faire ce que tu souhaitais :). Pas de plugin prévu pour cette fonctionnalité mais merci pour l’idée.
        Passe une belle journée :).

        Amicalement,

        Pierre.