Petite explication WordPress aujourd’hui. Récemment, pour le blog d’une cliente à Lyon, j’ai dû exclure une catégorie du site, de manière à ce que les articles soit publiés sur le site mais ne soient accessibles que si on a l’url directe (envoyée via une newsletter aux abonnés).
J’ai fait ça sans utiliser de plugin. Cela dit, c’est un choix, car il est possible d’utiliser un plugin comme Ultimate Category Excluder par exemple. Mais, pour les besoins que j’avais, je trouvais plus léger d’utiliser une simple fonction.
Il faut utiliser le fichiers functions.php du site et y ajouter une fonction PHP qui va pré-traiter les requêtes de récupération des articles. Voici le code :
function demo_exclude_category( $wp_query ) { if((is_home() || is_archive() || is_feed() || is_search()) && !is_admin()) { $excluded = array( '-385','-384', '-386' ); set_query_var( 'category__not_in', $excluded ); } } add_action( 'pre_get_posts', 'demo_exclude_category' );
La technique est simple, on utilise les directives WordPress is_home(), is_archive(), is_feed(), is_search et is_admin() qui sont basiquement tous les cas d’affichage de listes d’articles qui existent dans WordPress. Respectivement : accueil, archive, flux RSS, résultats de recherche et administration.
Si on entre dans un de ces cas, alors on exclus les catégories voulues, dont on indique l’identifiant. Mais on exclus pas les articles si on est dans l’admin du site (!is_admin()), en effet, on veut quand même pouvoir accéder aux catégories « cachées » en back-office.
Cette technique permet d’exclure les catégories voulus des affichages dans votre site, mais les articles seront quand même accessible avec l’url directe. Par contre, cela n’exclus pas les catégories de vos éventuels widgets. Pour cela une autre fonction sera nécessaire ou un plugin.