WordPress & Référencement naturel
Mes servicesWordPress - Référencement
Hébergement WordPress
Vous êtes ici : SeoMix » WordPress » Hacks, fonctions et snippets WordPress » Ne montrez que les articles de l’utilisateur sur WordPress !

Ne montrez que les articles de l’utilisateur sur WordPress !

S'il y a un élément où WordPress peut-être amélioré, c'est la gestion collaborative de son outil. Et c'est toujours aussi vrai malgré les améliorations apportées par la toute dernière version WordPress 3.3.

L'un des problèmes de WP, c'est que n'importe quel utilisateur peut voir tous les articles des autres, au lieu de ne voir que les siens. Heureusement, une simple fonction peut corriger ce problème.

Pourquoi afficher les contenus de tout le monde ?

Cela m'avait déjà choqué auparavant : pourquoi peut-on voir tous les articles des autres utilisateurs ? Cela n'a aucun intérêt.

Quand on est référenceur, cela permet juste en s'inscrivant de trouver des dizaines de sujets d'articles à créer. En d'autres termes, le fait que WordPress affiche la liste complète des articles des autres utilisateurs n'a pas vraiment d'intérêt, et peut même nuire à celui qui gère un site multi-utilisateur. Je pense notamment à ceux qui utilisent le CMS pour gérer un annuaire, un site de communiqués de presse ou de digglike.

WordPress affiche les articles de tous les utilisateurs

WordPress affiche les articles de tous les utilisateurs

Affichez uniquement les articles de l'utilisateur

Comme l'un de vous vient de me demander comment corriger ce problème, je me suis penché sur la question.

La solution a été donnée par Mark/t31os sur le site officiel de WordPress, et rien n'est plus simple à faire. Utilisez tout simplement le fichier functions.php de votre thème WordPress pour y ajouter ce code:

//************* Ne montrez que ses posts à l'utilisateur
function posts_for_current_author($query) {
    global $user_level;
    if($query->is_admin && $user_level < 5) {
        global $user_ID;
        $query->set('author',  $user_ID);
        unset($user_ID);}
    unset($user_level);
    return $query;}
add_filter('pre_get_posts', 'posts_for_current_author');

Et voilà : désormais, les utilisateurs de votre blog WordPress ne verront que leurs articles, et pas ceux des autres.

Un auteur ou contributeur ne verra que ses articles WordPress

Un auteur ou contributeur ne verra que ses articles

Les utilisateurs administrateurs et éditeurs verront toujours la liste compète des contenus, tandis que les auteurs et contributeurs de votre blog WordPress ne verront que les leurs.

Source : WordPress.org

Attention : GeekPress a également trouvé en commentaire le moyen de masquer les textes "Publiés, Brouillon, Corbeille". Voici son code, corrigé par mes soins :

//************* Ne montrez que ses posts à l'utilisateur
if ( is_admin()) {
function postsforcurrentauthor($query) {
  global $user_level;
  if($user_level < 5) {     global $user_ID;     $query->set('author',  $user_ID);
    unset($user_ID);
    $screen = get_current_screen();
    add_filter('views_'.$screen->id, 'remove_post_counts');}
  unset($user_level);
  return $query;}
add_filter('pre_get_posts', 'postsforcurrentauthor');
function remove_post_counts($status_links) {
  unset($status_links);
  return $status_links;}}
Publicité SeoMix
Les thèmes relatifs

Voici les thématiques abordées par Ne montrez que les articles de l’utilisateur sur WordPress !:

35 commentaires sur Ne montrez que les articles de l’utilisateur sur WordPress !

  1. 1 message

    Xavier - Le 29 décembre 2011, 09:38

    Simple et efficace ! Je me garde ça sous le coude.

    Merci d’avoir fait la recherche, je m’étais aussi déjà fait la remarque mais sans aller au fond des choses.

  2. Vincent
    21 messages

    Vincent - Le 29 décembre 2011, 09:57

    Super astuce ! C’est sur qu’en termes de gestion collaborative, WordPress a encore de la marge de progression.

    Si je comprends bien ton code, l’admin verra par contre tous les messages ?

  3. Aymeric
    2 messages

    Aymeric - Le 29 décembre 2011, 10:03

    Merci! c’est vrai que sur certains blogs sur lesquelles j’ai des comptes auteur, le fait de voir les brouillons et ou sujets en attentes de modération m’a toujours étonné…

  4. Gaëtan
    2 messages

    Gaëtan - Le 29 décembre 2011, 10:51

    Je m’apprête justement à lancer un annuaire local en début d’année prochaine…

    Super astuce !

    Merci et bonnes fêtes !

    Gaëtan – @lynkky

  5. Communiqués de Presse Gratuits
    22 messages

    Communiqués de Presse Gratuits - Le 29 décembre 2011, 12:57

    C’est marrant, j’ai implémenté ça il y a pile 10 jours sur mon blog collaboratif. Comme quoi les grands esprits se rencontrent ;)

  6. Bert
    3 messages

    Bert - Le 29 décembre 2011, 13:23

    Sympa ce hack, faudrait juste pouvoir supprimer les liens du haut (Tous | Publiés | Planifié | Brouillons | En attente de relecture | Corbeille) et ce sera parfait.

  7. 1 message

    Jeff - Le 29 décembre 2011, 15:18

    Très bonne astuce qui permet aux curieux de rester dans le brouillard, solution mise en place et fonctionne parfaitement. Merci.

    @Vincent : J’ai bien vérifié : l’admin garde tout ses droits.

  8. 3 messages

    Puntocano - Le 30 décembre 2011, 10:19

    Cette astuce est bien sympa et je vais probablement l’appliquer sur mon site de CP.
    Cependant, si on se place du côté des contributeurs, ce hack nous prive à priori d’une information non négligeable : on ne peut plus voir combien d’articles sont en attente de relecture. Et il devient donc difficile d’évaluer si les délais de validation sont rapides ou pas.

  9. Screenfeed
    10 messages

    Screenfeed - Le 31 décembre 2011, 17:59

    Joli!

    Je ne savais pas que l’on pouvait encore utiliser les « user levels« .
    Une chose m’échappe tout de même. Étant donné que les 2 variables $user_level et $user_ID n’ont pas été modifiées, je ne vois pas l’utilité des 2 unset(). A mon sens cela pourrait même être contre-productif, mais je dois rater quelque chose sinon Mark/t31os ne les aurait pas mis.

    Merci! :)

  10. 2 messages

    Axekap - Le 06 janvier 2012, 20:01

    C’est vrai que lorsque MU est passé en natif, cette anomalie aurait pu être corrigée. Modification utile !

  11. Diije
    12 messages

    Diije - Le 13 janvier 2012, 14:01

    Salut Daniel !
    Merci pour cette astuce.

    Est-ce que le « unset() » est vraiment utile ? Quel est l’avantage de l’utiliser ?

    Je dis ça parce que je connaissais pas cette fonction :p

  12. Loic Helias
    6 messages

    Loic Helias - Le 13 janvier 2012, 14:27

    Ca c’est un bon hack pour WP! Merci de l’astuce Daniel.
    Pensez à refaire la manipulation à chaque mise à jour!
    Loic

  13. Shelko
    5 messages

    Shelko - Le 13 janvier 2012, 15:13

    Super ce hack, c’est qu’il y a un petit soucis de discrétion à ce niveau surtout sur les brouillons, car pour le reste une recherche sur le blog avec les mots clés en vue peut aussi être faite pour trouver de l’inspiration.

  14. Daniel Roch
    526 messages

    Daniel Roch - Le 13 janvier 2012, 16:52

    @Diije : je pense que c’est pour éviter de garder en mémoire des variables inutiles

  15. 1 message

    accessibilité web - Le 17 janvier 2012, 16:40

    Bonjour,
    unset() détruit la variable située entre ses parenthèses. Cela évite comme le dit @Daniel de réserver de la mémoire sur le serveur pour quelque chose dont on ne se sert plus.
    Le hack est bien pensé en tout cas.

  16. Diije
    12 messages

    Diije - Le 17 janvier 2012, 17:05

    En fait je m’interrogeais sur le fait qu’on « unset » une variable globale, et sur l’intérêt de la chose.

    Si je ne m’abuse, PHP a une sorte de garbage collector, non ?

    Merci pour vos réponses en tout cas, je tâcherai d’utiliser unset() à l’avenir.

  17. Alain RONK
    3 messages

    Alain RONK - Le 05 février 2012, 14:00

    Bonjour,

    Tout d’abord merci pour vos infos précieuses !!!

    Dans l’article « Affichez uniquement les articles de l’utilisateur » est-il possible de supprimer les infos regroupant la totalité des articles présents sur le site ?
    Dans votre exemple : Tous (245) | Publiés (121) | Brouillons (124)

    Par avance, merci !
    Cordialement,
    Alain RONK

  18. Daniel Roch
    526 messages

    Daniel Roch - Le 06 février 2012, 14:17

    Théoriquement, je pense que oui, mais il faudrait chercher un peu pour trouver le hook qui permettrait cela.

    Je regarderai cette semaine si c’est faisable ou non.

  19. Alain RONK
    3 messages

    Alain RONK - Le 06 février 2012, 16:25

    Bonjour Daniel et merci pour votre réponse.
    J’ai pu contourner le problème, donc ne cherchez pas pour rien, ne perdez pas votre temps, le temps est précieux !

    Néanmoins, j’ai une autre question…

    Quand on charge une image pour l’insérer dans un article, on ouvre une boite de dialogue qui permet de charger l’image à partir de l’ordinateur, ou du web, ou de la galerie ou enfin, de Nextgen Gallery (quand celui ci est installé).

    Est-il possible de charger l’image uniquement à partir de l’ordinateur ou au minimum, de supprimer l’onglet Nextgen Gallery ?

    Encore merci pour votre aide précieuse !

    Cordialement,
    Alain RONK

  20. Daniel Roch
    526 messages

    Daniel Roch - Le 06 février 2012, 19:07

    Là aussi, il faut que je creuse pour trouver le bon filtre, mais c’est tout à fait faisable.

  21. Greg
    10 messages

    Greg - Le 06 février 2012, 19:13

    Cherche pas Daniel, j’ai répondu à cette même question sur mon blog ^^

  22. Alain RONK
    3 messages

    Alain RONK - Le 06 février 2012, 22:02

    Oui, Daniel, ne perdez pas votre temps !

    Toutes mes excuses, je n’avais pas vu votre réponse…

    Cordialement,
    Alain

  23. GeekPress
    8 messages

    GeekPress - Le 08 février 2012, 02:33

    Je viens de mettre l’astuce sur GeekPress et ça marche au poil ! Merci bien pour cette astuce qui me sera très utile. Si j’arrive à trouver un peu de temps libre, j’essayerai de me pencher sur les nombres totaux ‘Tous’, ‘Publiés’, etc…

    Bon voilà j’ai trouvé (insomnie quand tu nous tiens…). En fait, il n’est pas possible de modifier les résultats totaux des différentes status. WordPress n’a pas fournit de hooks permettant d’agir dessus.

    Par contre, on peut gérer la liste des status qui est affiché. Du coup, ils ne nous servent plus à rien si on ne peut pas avoir les décomptes finaux en fonction de l’utilisateur. Voici le code qui permet de supprimer « Les miens », « Publié », etc…

    //************* Ne montrez que ses posts à l'utilisateur
    function posts_for_current_author($query) {
        global $user_level;
       
        if($query->is_admin && $user_level < 5) {
            global $user_ID;
            $query->set('author',  $user_ID);
            unset($user_ID);
           
            $screen = get_current_screen();
            add_filter('views_'.$screen->id, 'remove_post_counts');
           
        }
        unset($user_level);
        return $query;
    }
    add_filter('pre_get_posts', 'posts_for_current_author');

    function remove_post_counts($status_links)
    {
        return unset($status_links);
        $status_links;
    }

  24. Daniel Roch
    526 messages

    Daniel Roch - Le 08 février 2012, 08:50

    Bravo Geekpress, et merci pour cet ajout de code que je vais placer directement dans l’article. ;)

  25. krysttof
    1 message

    krysttof - Le 08 février 2012, 10:59

    Ecran blanc avec la modif de GeekPress :(

  26. Daniel Roch
    526 messages

    Daniel Roch - Le 08 février 2012, 11:51

    Effectivement, le code plantait. J’ai mise à jour le snippet de l’article pour corriger le bug.

  27. GeekPress
    8 messages

    GeekPress - Le 08 février 2012, 12:02

    Erreur de ma part ou c’est la balise code qui a planter quelque part ?

    J’ai pourtant le code sur mon blog :/

  28. Daniel Roch
    526 messages

    Daniel Roch - Le 08 février 2012, 12:20

    A mon avis, simple erreur de copier/coller et d’encodage lors du commentaire. Mais c’est maintenant corrigé.

  29. Julio Potier
    22 messages

    Julio Potier - Le 08 mars 2012, 10:50

    Ho j’ai raté cet astuce !
    Allez, j’ajoute mon grain de sel comme j’aime faire dans les astuces :p
    Déjà, je vois 2/3 incohérence, Mark/t31os ou pas, ça reste un humain et il a droit à l’erreur.
    Invoquer $user_ID et $user_level n’est pas recommandé car cela sera deprecated bientôt, c’est annoncé dans le core.
    De plus, en faire un unset rends impossible une future utilisation, c’est tout de même étrange :o
    Voici ma version qui utilise « wp_get_current_user() », et j’ai modifié aussi le filtre des liens des compteurs pour tout de même afficher le « Mine ».
    ps : Pour info, ceci :

    unset( $var );
    return $var;

    revient à faire

    return null;

    Voici don mon grain de sel :

    if( is_admin() ){
                function postsforcurrentauthor( $query )
                {
                        $user = wp_get_current_user();
                        if( $user->user_level < 5 ) {
                                $query->set( 'author', $user->ID );
                                $screen = get_current_screen();
                                add_filter( 'views_' . $screen->id, 'remove_post_counts' );
                        }

                        return $query;
                }
                add_filter( 'pre_get_posts', 'postsforcurrentauthor' );
         
                function remove_post_counts( $views )
                {
                        return (array)$views['mine'];
                }

        }

    Bonne journée !

  30. 1 message

    Céline - Graphiste - Le 19 mars 2012, 17:20

    Est t’il possible de faire la même chose mais pour la bibliothèque média ?
    Les auteurs et contributeurs ne vois que leurs images uniquement.

  31. Daniel Roch
    526 messages

    Daniel Roch - Le 20 mars 2012, 10:47

    Théoriquement c’est faisable. Il faudrait que je me penche sur le code pour voir comment cacher ces éléments.

  32. 2 messages

    Alex - Le 27 mars 2012, 16:16

    je vous remercie pour ces informations, je suis novice en wordpress et encore plus en php, le code c’est pas mon truc mais c’est très utile et ma question peut paraître bête mais le code donné doit-être coller après quoi dans fonction.php? car je fait des tests mais ça me met des erreurs ;-((((

    merci pour votre aide et dsl c’est mes débuts ;-)

  33. Daniel Roch
    526 messages

    Daniel Roch - Le 28 mars 2012, 14:06

    Il faut le coller entre la balise ‹?php du début et la balise ?› de la fin de votre fichier

  34. 2 messages

    Alex - Le 28 mars 2012, 16:13

    merci super ça fonctionne, et savez vous s’il existe une extension simple qui permettrait de personnaliser l’interface du back office vraiment pour qu’il ne se rende pas forcément compte qu’il est sur WP? je suis un peu perdu au milieu de tous les plugins…

    merci bcp

  35. aalex57
    1 message

    aalex57 - Le 24 avril 2012, 22:33

    Merci pour l’astuce, cependant je viens de mettre cette astuce sur le blog, et étant administrateur de mon blog je ne vois plus que mes propres articles :/

» Commentez cet article !
(Merci de donner un vrai prénom ou pseudo)
(Ne sera jamais publié)
(Modèration subjective)
Html accepté <a> <i> <b> [codesyntax]CODE[/codesyntax]
» Prévisualisez votre message

© 2010-2012 SeoMix : WordPress & Référencement
Propulsé par WordPress et Daniel Roch. Logo créé par Willy Bahuaud
Je ne suis pas un "footer" de merde, mais un agitateur de visibilité !

A propos de SeoMix
Mes servicesWordPress - Référencement Devenez rédacteurPour le site SeoMix
Suivez-nous !
  • 4697 abonnés
  • 137 articles
  • 3074 messages
Vous devriez lire
Indispensable
Seo et emarketing
WordPress
Mes autres sites

SeoMix - 87 rue du Châtelier 44400 Rezé - Par Daniel Roch, sur WordPress - Email