Exclure une catégorie d’article de la boucle principale de WordPress est une demande récurrente sur ce site.
Plusieurs méthodes existent car elles dépendent directement de la façon d’afficher la liste d’articles. Attention : pour utilisateurs avertis uniquement.
#1 – Utilisation de la fonction WP_Query
La fonction WP_Query est très utile pour afficher tout type de contenu sur votre site.
Dans cet exemple, je définis 2 variables $paged
et $loop
. La première permet la prise en charge de la pagination – le nombre d’articles étant défini dans votre administration WordPress ou via un paramètre, la seconde définit les arguments de la boucle.
Pour exclure la catégorie, indiquez son ID précédé d’un signe moins pour l’argument cat
.
Ensuite, à partir de la ligne 5, on affiche la traditionnelle boucle des articles de WordPress. Ici, seuls les titres des articles sont listés. Libre à vous de la personnaliser en fonction de vos besoins !
#2 – Utilisation de la fonction query_posts
La fonction query_posts
est très connue mais rarement utilisée comme il faudrait. Il faut dire que ce n’est pas évident de comprendre quand utiliser la bonne méthode d’affichage…
Dans ce cas de figure, il faut directement agir sur la boucle présente dans votre thème dans le fichier index.php – pour l’accueil par exemple.
En effet, la première méthode vous permet d’afficher les derniers articles n’importe où sur votre site pour tester. La seconde vient altérer une boucle déjà en place. Elle convient mieux aux utilisateurs souhaitant réutiliser l’affichage en place : titre avec permalien, miniature, extrait, etc.
Ainsi, dans le thème par défaut Twenty Eleven, éditez le fichier index.php en rajoutant la fonction query_posts
dans la boucle.
Pour exclure la catégorie, indiquez son ID précédé d’un signe moins comme précédemment. Ici la catégorie 1 est exclue.
Ces 2 techniques vous permettront de mieux comprendre le fonctionnement de la boucle de WordPress et surtout comment la modifier. Une fois le principe compris, les 2 liens vers le codex vous aideront à faire ce que vous voulez avec ! D’autres méthodes, amis lecteurs ?
Bonjour, 3 ans plus tard ! pour dire que j’ai copié collé la fonction de Djib’s qui n’a jamais voulue marcher chez moi, j’ai cherché partout, essayé de modifier un truc par ci par là, avant de trouver : remplacer les quotes (‘) par des doubles quotes (“) ! si si !
En tous les cas, merci Djib’s pour m’avoir mis sur la meilleur méthode 🙂
#3 – Utiliser l’action pre_get_posts 🙂
C’est une méthode très efficace, qui a l’avantage de ne pas toucher aux fichiers loops. J’ai rédigé un article à ce sujet sur mon Blog http://www.tunibox.com/wordpress/cacher-une-categorie-de-la-page-daccueil-et-du-flux-rss-wordpress.html
Il suffit de modifier $query->is_home() par n’importe quelle autre condition…
Bonjour,
après quelques recherches sur le net, je viens sur ce superbe blog pour vous demander de l’aide :
je souhaite savoir si c’est faisable avec des lignes de codes ou plugins :
– je voudrais sur un ou plusieurs menus de mon site masquer automatiquement des catégories quand elles sont vide (site e-commerce). et enlever un article / produit du site quand le stock est vide.
Merci beaucoup.
Pour le stock, il faut voir avec les options de ton module e-commerce ou si cela n’est pas possible en utilisant du code (à voir dans les documentations officielles). Pour autant, cela va créer des URLs indisponibles en grande quantité… il faut gérer cela pour le SEO !
Pour les catégories vides, pas d’idées pour le gérer en automatique bien que cela dusse pouvoir se faire.
Bonjour,
Moi j’utilise le plugins Simply Exclude, en tant qu’administrateur, mais je viens de me rendre compte ( ma femme ) qu’il n’est pas utilisable pour les éditeurs. Est que c’est juste ou qui peux me donner le paramètre pour que les éditeurs puissent l’utiliser.
Merci
Hello !
Alors tout se passe sur ce site : http://aie-tek.com
Comme vous pouvez le constater, il existe trois espaces pour l’actualité.
La principale : News fraîches
La seconde : smartphones
La troisième : PC/Mac
Là où ça se complique pour moi, c’est lorsque je publie un article PC ou smartphone. J’aimerai qu’il ne s’affiche que dans PC ou smartphone et pas dans l’actu générale.
Pour les deux dernières, j’appelle simplement les catégories. Tout va bien.
Pour la première, je souhaite donc exclure les catégories pcmac et smartphones.
Merci d’avance !
Merci de nous indiquer un plugin qui fait la même chose sans entrer dans le code php de wordpress
Génial le query_post ! Je galérais et voilà une chose de faite en moins de 5 min.
Salut Aurélien,
J’ai un vieux wordpress 3.0.4. pour lequel je voudrais exclure les catégories de ma home page. Peux-tu m’aider sur la manière de faire et quel code à insérer ?
idem pour les flux RSS.
Merci Aurélien.
Merci beaucoup pour cette fonction dont je me sers plusieurs fois!
Par contre j’aurais voulu exclure ma catégorie de ma sidebar qui appelle le widget catégories car là elles apparaissent.
Merci pour le tuyau!
Il existe un plugin Widget Category de mémoire qui permet de choisir les catégories que l’on souhaite afficher. 😉
Merci beaucoup pour la réponse!
J’avais télécharger widget logic mais qui est une véritable usine à gaz pour l’utilité que j’ai des widgets. J’ai donc trouvé un autre plugin “simply exclude”. Tout est dans le nom très simple d’utilisation suffit juste de cocher les catégories que l’on veut exclure…
Bonjour,
Tout d’abord merci pour ce magnifique blog qui me rend très souvent de grands services. Vive la communauté WordPress et ses blogueurs 😉
Alors je ne sais pas si c’est le bon endroit pour poster ce commentaire, mais j’ai une question intéressante à poser.
Comment ce fait-il que, quand on clique sur une sous catégorie dans le menu, les articles affichés ne sont pas que ceux de la catégorie en question?
C’est à n’y rien comprendre !!!
Bien à vous,
Fabien
Sans doute un problème de boucle mal fermée qui fausse l’affichage… 🙂
Genial comme article. Merci beaucoup.
Amicalement.
Rock’n law
Petite question, et si un article a plusieurs catégories, on le verra ou pas?
On le verra.
Merci pour la réponse 🙂
Moi perso, j’utilise ce code dans dans functions.php
function myFilter($query) {
if ($query->is_home) {
$query->set(‘category__not_in’,array(2590));
}
return $query;
}
add_filter(‘pre_get_posts’,’myFilter’);
Quel est la meilleure solution selon vous ?
Merci
La tienne mon ami ! Car avec la tienne, tu ne recrées pas une requête de plus, tu modifies celle de la home, ça c’est opti. Désolé Aurélien !
Bien je note, merci!
Cool super merci de ton partage ! 😎
En plus l’avantage, c’est que la catégorie ne se verra pas non plus dans le flux rss pour la page principale, ni dans les pages qui suivent la Home (page 2, Page 3,…)
Ha, je me disais bien que Rahe serait venu dire ça !
Aurélien ! T’as pas écoute au WordCamp !? haha il a parlé de ça ;p Oui bon, ils ont fait vite 😉
Perso, j’aimerai bien aussi voir le code proposé par Rahé la dessus
Merci à vous 2 !
Le WordCamp comment a dater dans ma tête qui a du mal à se remettre du décalage horaire avec Sydney… donc bon. :p
comment l’a modifier => comment la modifier
Sinon tres interessant, ca ouvre quelques possibilités.
Je vais suivre ce post
Cool ! Mais il ne faut pas oublier de mettre un wp_reset_postdata() après le endwhile sinon tout le reste de la page sera faussé :).
Sinon le mieux est de se placer dans l’action parse_query et modifier la query de WP à la base 🙂
Oui je l’oublie souvent le reset… 😉
: ça je sais pas faire ! 😀