Modifier la requête principale d’affichage des articles

Publié le Publié dans Développement, Wordpress

En travaillant sur un site d'un ami, on est tombé sur un petit problème... Il voulait exclure de sa page d'accueil des catégories d'articles. Une première solution trouvée sur le net m'a permis de faire le ménage mais on a eu la surprise de voir les articles affichés en double !

Il était hors de question de laisser ça comme ça... Du coup j'ai fouillé la documentation WordPress, les forums, les sites ... Et je suis tombée sur une solution magnifique et pérenne : passer par un hook !

Le hook en question s'appelle pre_get_posts et est appelé après la création de la requête principale, mais avant que celle-ci ne soit réellement exécutée. Ce qui nous permet de la modifier en y ajoutant nos conditions.

 

Toute la documentation se trouve sur le codex : voir la page de la documentation de pre_get_posts. En lisant cette documentation, j'ai découvert qu'on pouvait en effet exclure des catégories de la requête principale seulement si on est sur la page d'accueil. Pour ce faire, il nous suffit de créer une fonction exclude_category et de la déclarer à notre hook.  
function exclude_category( $query ) {
    // Si la query est éxécutée sur la page d'accueil 
    // et si c'est la requête principale
    if ( $query->is_home() && $query->is_main_query() ) {
        // j'exclue les catégories 
        $query->set( 'cat','-76, -77, -81' );
    }
}
// Déclaration de notre action
add_action( 'pre_get_posts', 'exclude_category' );

Et c'est finit ! Notre requête exclue bien nos catégories et les articles ne sont pas affichées en double.