WordPress

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

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 🙂 …

 

Après avoir visité les coulisses, découvrez le site :) !

6 Commentaires

  1. Carole

    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 🙂

    Réponse
    • Pierre

      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.

      Réponse
  2. Carole

    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.

    Réponse
    • Pierre

      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.

      Réponse
      • Carole

        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

        Réponse
        • Pierre

          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.

          Réponse

Poster le commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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