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.
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.
Code mise à jour le 17/02/2022
add_filter('pre_get_posts', 'seomix_admin_user_show_myposts');
/**
* Ne montrer que ses posts à l'utilisateur
*
*/
function seomix_admin_user_show_myposts($query) {
if ( is_admin() ) {
if( ! current_user_can('edit_others_pages') ) {
global $user_ID;
$query->set( 'author', $user_ID );
if ( !function_exists( 'get_current_screen' ) ) {
require_once ABSPATH . '/wp-admin/includes/screen.php';
}
$screen = get_current_screen();
add_filter( 'views_'.$screen->id, 'seomix_admin_user_remove_post_counts' );
}
return $query;
}
}
function seomix_admin_user_remove_post_counts($views) {
if ( is_admin() ) {
$views = array_intersect_key( $views, array_flip( array( 'mine', 'trash' ) ) );
return $views;
}
}
Ancien code du 02/04/2013 :
/**
Ne montrer que ses posts à l'utilisateur
*
*/
if ( is_admin()) {
function seomix_adm_user_show_myposts($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, 'seomix_adm_user_remove_post_counts');}
return $query;}
function seomix_adm_user_remove_post_counts($views) {
$views = array_intersect_key($views, array_flip(array('mine','trash')));
return $views;}
add_filter('pre_get_posts', 'seomix_adm_user_show_myposts');
}
Et voilà : désormais, les utilisateurs de votre blog WordPress ne verront que leurs articles, et pas ceux des autres.
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
51 Commentaires
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.
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 ?
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é...
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
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 ;)
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.
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.
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.
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! :)
C'est vrai que lorsque MU est passé en natif, cette anomalie aurait pu être corrigée. Modification utile !
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
Ca c'est un bon hack pour WP! Merci de l'astuce Daniel.
Pensez à refaire la manipulation à chaque mise à jour!
Loic
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.
@Diije : je pense que c'est pour éviter de garder en mémoire des variables inutiles
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.
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.
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
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.
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
Là aussi, il faut que je creuse pour trouver le bon filtre, mais c'est tout à fait faisable.
Cherche pas Daniel, j'ai répondu à cette même question sur mon blog ^^
Oui, Daniel, ne perdez pas votre temps !
Toutes mes excuses, je n'avais pas vu votre réponse...
Cordialement,
Alain
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...
Bravo Geekpress, et merci pour cet ajout de code que je vais placer directement dans l'article. ;)
Ecran blanc avec la modif de GeekPress :(
Effectivement, le code plantait. J'ai mise à jour le snippet de l'article pour corriger le bug.
Erreur de ma part ou c'est la balise code qui a planter quelque part ?
J'ai pourtant le code sur mon blog :/
A mon avis, simple erreur de copier/coller et d'encodage lors du commentaire. Mais c'est maintenant corrigé.
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 :
revient à faire
Voici don mon grain de sel :
Bonne journée !
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.
Théoriquement c'est faisable. Il faudrait que je me penche sur le code pour voir comment cacher ces éléments.
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 ;-)
Il faut le coller entre la balise ‹?php du début et la balise ?› de la fin de votre fichier
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
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 :/
ha parfait le hook, par contre, on voit toujours le nombre d'articles total sur le "Tableau de bord".
Merci pour le partage :)
Bonsoir, ce Hack pour la dernière version de WordPress ne fonctionne pas :-(
Bonjour Pascal : le code vient d'être corrigé et amélioré.
Bonjour,
ce code est trés trés bien, seul souci il retire les custom fields (advanced custom fields) dans les posts dommage!
si quelqu'un a une solution, je suis preneur
@Reg : Cela vient du code suivant :
Essaie de supprimer cette ligne.
bonjour
merci pour ta réponse Daniel, j'ai supprimé ces 2 lignes et tj le même pb, cela doit être à cause du thème particulier que j'utilise.
Toutefois j'ai trouvé une autre solution pour ceux qui rencontrent ce pb
un plug in voici le lien
http://code.mincus.com/41/manage-your-posts-only-in-wordpress/
si quelqu'un a une solution pour ne pas que les utilisateurs voient la bibliothéque et donc les images des autres, je suis aussi preneur, si je trouve je vous en ferai profiter.
merci à vous tous!
Fais dans ce cas un essai avec mon code et sans le plugin concerné.
Merci pour ce code qui est intéressant, seul souci il retire les custom fields (advanced custom fields) dans les posts même après avoir enlevé la ligne add_filter('views_...) .
Comment faire sans utiliser le plugin mentionné par reg?
Bonjour,
Est-il possible de faire la même chose mais dans le front du site ? C'est à dire qu'un utilisateur enregistré ne voit sur le site, que les articles que lui-même aurait écrit (c'est une demande étrange, mais c'est pour gérer des bibliothèques de classe).
Oui, c'est techniquement faisable. Malheureusement, le code de cet article ne vous aidera pas pour faire cela car c'est un tout autre développement qu'il faudra réaliser
Merci à vous pour la réponse. Je m'en vais chercher cela.
Même problème pour moi, il me faudrait cela mais dans le front du site et j ai beau fouiller depuis des jours je ne tombe pas sur le graal! Personne aurait une piste?
Superbe astuce, seulement je note un petit hic dans le cas ou l'auteur n'a pas encore posté d'article, celui-ci a alors accès à l'ensemble et peut les modifier à souhait !
J'ai l'impression que le système prend en compte ce hak uniquement à partir d'un article, pas avant ...
: / une amélioration peut-être ?
Bonjour,
J'utilise cette fonction depuis plusieurs années mais ce matin, une erreur fatale de WordPress sur tous les sites où je l'ai installée. Sans doute liée à une la dernière maj de WP, mais sans que cela fasse tomber les sites.
Uncaught Error: Call to undefined function get_current_screen()
Avez-vous un petit update sous le coude ?
Merci d'avance !
Je viens de mettre à jour l'article, mais je n'ai pas pu tester en live sur un WordPress.
Top ! Je l'ai installé pour voir. Tout semble OK. Merci !
Laisser un commentaire