Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Maitriser WP-Query: Une introduction

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Using the Loop

French (Français) translation by Jean-Frédéric Barré (you can also view the original English article)

Par défaut, WordPress lance une requête lorsque vous chargez une page de votre site. Chacune de ces requêtes est déterminée par le type de page que vous chargé. Donc, si vous chargé une page statique, WordPress lance une requête pour afficher la page ayant l'ID demandée. Si c'est une page archives qui est demandée, la requête va demander touts les billets de cette archive.

Mais parfois, vous pouvez avoir besoin de plus que cela ! Que ce soit dans le contenu principal de votre page ou bien ailleurs, par exemple dans la barre latérale ou le pied de page, vous pouvez avoir envie d'afficher des contenus particuliers, en plus de la requête principale.

La bonne nouvelle c'est que WordPress le permet, grâce à la classe : WP_Query Cette classe met à votre disposition toute une série de paramètres qui vont vous permettre de définir quels contenus vous désirez afficher. Cette classe va écrire une boucle affichant les contenus choisis;

Dans cette série en 10 parties intitulée "Maistriser WP_Query, Baris Unver et moi même (Rachel McCollin), nous allons voir tous les tenants et aboutissants de WP_Query. Ainsi, à la fin de cette série, vous serez capable de l'utiliser dans une grande variété de scénarios et vous pourrez le configurer comme bon vous semble pour afficher les éléments de votre base de données.

Dans cette introduction, nous allons voir :

  • C'est quoi WP_Query ?
  • Pourquoi utiliser WP_Query ?
  • Problèmes potentiels - des choses importantes à prendre en compte.

C'est quoi WP_Query ?

WP_Query est une classe fournit dans WorPress. Une classe peut être utilisée pour facilement gérer des données sans écrire de code. Celui-ci est en fait "intégré" dans la classe WordPress. Cela permet d'écrire un code plus propre et surtout plus fiable.

Si vous voulez comprendre très exactement comment fonctionne WP_Query, vous pouvez voir son code dans le fichier includes/query.php

WP_Query est constitué de quatre grands éléments :

  • les arguments de la requête, ils utilisent des paramètres que nous verrons plus tard
  • la requête proprement dite
  • la boucle, c'est elle qui va affichere le contenu de chaque billet.
  • fermeture des balises if et while,remise à zéro des données.

Dans les faits, voici comment cela fonctionne :

Nous pourrions définir les arguments directement dans la requête mais je préfère définir les arguments en premier, pour garder un code plus propre. 

Remettre à zéro les données

Dans l'exemple qui suit, j'ai ajouté wp_reset_postdata() après chacune des requêtes. C'est essentiel, cela permet de revenir à la boucle principale.(note du traducteur : à étoffer, partie importante.)

Par exemple, si vous utilisez WP_Query pour lancer une requête  dans la barre latérale, en utilisant wp_reset_postdata(), nous pouvons dire à WordPress que nous sommes bien sur une page particulière et éviter les conflits.

Si vous ne le faites pas, toutes les requêtes suivantes sur cette page risque de ne pas fonctionner ; y compris la requête principale.

Pourquoi utiliser WP_Query ?

Si vous n'avez jamais utilisé cette classe auparavant, vous pourriez vous demander pourquoi vous en auriez besoin maintenant ? Je vais me concentrer sur deux aspects : pourquoi utiliser WP_Query plutôt qu'une autre méthode ?dans quel type de scénarios utiliser WP_Query ?

Pourquoi utiliser WP_Query et pas d'autres méthodes de modification de la requête ?

WP_Query n'est pas l'unique méthode pour créer des requêtes. En voici quatre autres :

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() à éviter, explications à suivre...

Nous n'allons pas approfondir chacune de ces techniques mais il est important de savoir quand les utiliser.

  • pre_get_posts est un "hook" qui modifie la requête principale. Vous pouvez l'utiliser pour vérifier si certaines conditions sont remplies (par exemple : est-ce-que j'affiche la page d'accueil ?) et ainsi ajouter des éléments à la requête (par exemple exclure les trois premiers billets qui sont affichés ailleurs sur la page). C'est une manière très efficace de modifier la requête principale et c'est la première technique à utiliser. Malgré tout, vous ne pouvez l'utiliser pour créer une requête de toutes pièces.
  • get_posts() et get_pages() sont très similaires. La différence est assez évidente, l'un pour les posts, l'autre pour les pages. Ces marqueurs de modèle utilisent la class WP_Query, ils font donc la même chose mais de manière différente et permettent plus de choses. Ils appellent WP_Query à votre place. Vous ne pouvez utiliser ces marqueurs de modèle que pour appeler des billets ou des pages alors que WP_Query est plus évolué et vous permet d'appeler n'importe quel type de donnée présent dans votre base de données.
  • query_posts() modifie la requête principale mais ne devrait pas être utilisé dans vos plugins ou vos thèmes. En effet, il remplace la requête principale par une requête complètement nouvelle. C'est aussi une source d'erreurs, en particulier pour le système de navigation. De plus il n'est pas efficace et va augmenter le temps de chargement de votre page. Si vous avez besoin de modifier la requête principale, utilisez plutôt pre_get_posts. Si vous voulez créer une nouvelle requête, utilisez WP_Query.

Le diagramme qui suit, réalisé par Andrey “Rarst” Savchenko sous licence Creative Commons permet de mieux comprendre ce qui se passe :

Make Sense of WP_Query Functions

Quand peut-on utiliser WP_Query ?

Il existe plein de cas dans lesquels l'utilisation de WP_Query est pratique. Nous ne pourrons pas les lister ici de manière exhaustive mais en voici quelques exemples :

  • Pour ajouter une liste d'articles en lien avec l'article affiché (par exemple la liste de tous les billets de la même catégorie).
  • Pour créer deux boucles sur la même page. Par exemple une page "Questions fréquentes" avec la question en titre en haut et le contenu dessous.
  • Pour créer une liste des billets récents dans une barre latérale ou le pied de page. Parfois le widget "Billets récents" ne propose pas assez d'options, vous pouvez donc coder vous même la requête qui vous convient.
  • Pour créer une requête sur les taxonomies en utilisant plusieurs termes différents pour sélectionner les contenus à afficher.
  • Pour appeler des types de contenu que la boucle principale ne prend pas en compte, comme par exemple les éléments attachés.
  • Pour créer des pages avec un nombre d'élément affiché différent en fonction de la catégorie, comme pour ce site pour un client.

Avertissements :

La classe WP_Query est vraiment géniale. Je l'utilise fréquemment pour créer des sites pour lesquels j'ai besoin de requêtes particulières. Mais il n'y a pas que des points positifs. Voici quelques points pour lesquels il faut faire attention :

  • Si vous voulez juste modifier la manière dont les billets sont affichés pour un type de contenu particulier, n'utilisez pas WP_Query. Utilisez plutôt un fichier de template de page en y modifiant la boucle.
  • Si vous voulez afficher plus ou moins de billets que ce que propose la requête de base, inutile de construire une requête complète avec WP_Query. Utilisez plutôt pre_get_posts pour modifier la requête principale à l'aide de marqueurs conditionnels.
  • Attention à ne pas lancer trop de requêtes différentes sur une même page ! Dans l'absolu, vous pouvez créer une page avec une multitude de requêtes différentes mais gare au temps de chargement. Si vous vous retrouvez avec quatre à cinq requêtes différentes sur la même page, il serait peut-être judicieux de scinder ce contenu sur plusieurs pages.

Récapitulatif :

La classe WP_Query est super pratique et très puissante pour créer des requêtes particulières et ainsi faire de WordPress exactement ce que vous désirez. Comme nous venons de le voir, dans certains cas il faudra utiliser une méthode différente mais la classe WP_Query peut être utilisée dans de nombreux cas de figure.

Dans la suite de cette série, nous allons voir en détail comment utiliser WP_Query et en tirer le meilleur.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.