Maîtriser WP_Query une introduction

Par défaut, WordPress lance une requête sur chaque page affichée par votre site, dont la nature sera déterminée par le type de page visualisée. Donc, si une page statique est en cours de visualisation, WordPress lance une requête pour afficher la page avec l'identifiant approprié, tandis que si une page d'archive est en cours de visualisation, la requête récupérera tous les articles de cette archive..

Mais parfois, vous voulez faire les choses un peu différemment. Que ce soit dans le contenu principal de votre page ou ailleurs dans la page (comme dans l'encadré ou le pied de page), vous pouvez afficher un contenu spécifique qui n'est pas généré par la requête standard..

La bonne nouvelle est que WordPress rend cela possible avec le WP_Query classe. Cette classe vous fournit un grand nombre de paramètres que vous pouvez utiliser pour définir le contenu que vous voulez afficher (qui ne doit pas être limité aux publications), puis écrire une boucle qui affichera le contenu exactement comme vous le souhaitez..

Dans cette série de dix-neuf articles sur le mastering WP_Query, Baris Unver et moi vous expliquerons les tenants et les aboutissants de WP_Query afin que, une fois la série terminée, vous puissiez l'utiliser dans une variété de scénarios et affiner la manière dont WordPress interroge les données de la base de données de votre site..

Dans cette introduction, je couvrirai les points suivants:

  • Quel est WP_Query?
  • Pourquoi utiliser WP_Query?
  • Problèmes potentiels / Ce qu'il faut savoir.

Qu'est-ce que WP_Query?

WP_Query est une classe fournie par WordPress. Le fait qu'il s'agisse d'une classe signifie qu'en l'utilisant, vous pouvez accéder rapidement aux variables, aux contrôles et aux fonctions qui ont été codés dans cette classe dans le noyau WordPress, sans avoir à vous soucier d'écrire tout ce code par vous-même. Cela rend votre code plus efficace et fiable.

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

WP_Query se compose de quatre éléments principaux:

  • les arguments de la requête, en utilisant des paramètres qui seront traités en détail dans cette série
  • la requête elle-même
  • la boucle, qui affichera le contenu, les titres ou tout ce que vous voulez afficher
  • terminer: fermer les balises if et while et réinitialiser les données post

En pratique, cela ressemblera à quelque chose comme ceci:

have_posts ()) // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); // Le contenu des résultats postés interrogés est disponible ici.  // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

Vous pouvez définir vos arguments lorsque vous écrivez la requête elle-même, mais je préfère les définir en premier, car cela garde les choses en ordre..

Réinitialisation des données de post

Dans l'exemple ci-dessus, j'ai ajouté wp_reset_postdata () après chaque requête. Ceci est important car il réinitialise la requête à la requête principale en cours d'exécution sur cette page.. 

Par exemple, si vous utilisez WP_Query exécuter une requête dans la barre latérale en utilisant wp_reset_postdata () indique effectivement à WordPress que nous sommes toujours sur la page en cours d'affichage et que cela doit fonctionner avec la requête par défaut pour cette page. 

Si vous ne le faites pas, toute autre requête en cours d'exécution sur la page (y compris la requête par défaut) risque de se rompre et toute balise conditionnelle recherchant le type de page en cours de visualisation ne fonctionnera pas..

Pourquoi utiliser WP_Query?

Si vous n'avez pas utilisé le WP_Query classe avant, vous pouvez vous demander pourquoi vous devriez commencer. Ici, je vais me concentrer sur deux aspects: pourquoi utiliser WP_Query par rapport à d’autres méthodes d’écriture de requêtes personnalisées et de scénarios dans lesquels vous souhaiterez peut-être utiliser WP_Query.

Pourquoi utiliser WP_Query sur d'autres méthodes?

WP_Query n'est pas la seule méthode pour créer une requête personnalisée. Il y en a quatre autres:

  • pre_get_posts
  • get_posts ()
  • get_pages ()
  • query_posts () (ce que vous devriez éviter, comme je vais l'expliquer)

Je ne vais pas entrer dans les détails pour savoir comment chacun de ces travaux fonctionne, mais il est utile de savoir quand ils sont utilisés:

  • pre_get_posts est un crochet qui modifie la requête principale. Vous pouvez l'utiliser avec une balise conditionnelle pour vérifier si un certain type de page est en cours d'affichage (par exemple, la page d'accueil), puis l'utiliser pour modifier la requête en cours d'exécution (par exemple, pour supprimer les trois publications les plus récentes, si vous le souhaitez. en les affichant ailleurs sur la page). C'est un moyen très efficace de modifier la requête principale et devrait être votre premier contact si c'est ce que vous voulez faire. Cependant, vous ne pouvez pas l'utiliser pour créer une nouvelle requête..
  • get_posts () et get_pages () sont très similaires, la principale différence étant évidente de leurs noms. Ces balises utilisent en réalité le WP_Query classe, alors ils sont une autre façon de faire la même chose, mais ajouter une étape supplémentaire, car ils appellent le WP_Query classe au lieu de le faire directement. Vous ne pouvez les utiliser que pour interroger des publications ou des pages, WP_Query lui-même est plus puissant et vous permet d'interroger presque tout ce qui se trouve dans votre base de données.
  • query_posts () modifie la requête principale mais ne doit pas être utilisé dans les plugins ou les thèmes. En effet, il rejette la requête principale et recommence, en remplaçant la requête principale par une nouvelle requête. Il est également sujet aux erreurs, en particulier avec la pagination, et est inefficace et affectera les temps de chargement de vos pages. Si vous devez modifier la requête principale, utilisez pre_get_posts à la place, et si vous voulez créer une toute nouvelle requête, utilisez WP_Query.

Le diagramme ci-dessous, publié par Andrey “Rarst” Savchenko sous licence Creative Commons, donne un sens à cela:

Quand utiliser WP_Query?

Il y a beaucoup de scénarios quand WP_Query viendra utile, et je ne peux pas tous les couvrir ici, mais voici un aperçu:

  • Pour ajouter une liste d'articles liés dans l'article actuel, par exemple une liste de tous les articles de la même catégorie.
  • Pour créer deux boucles sur la même page: par exemple une page de FAQ avec les titres de la question en haut et le contenu en dessous.
  • Pour créer une liste personnalisée d'articles récents dans la barre latérale ou le pied de page de votre site, lorsque le widget Articles récents ne fait pas ce dont vous avez besoin (ou préférez le coder vous-même).
  • Pour créer des requêtes personnalisées pour les taxonomies, utilisez plusieurs taxonomies pour définir ce qui est affiché..
  • Pour interroger des types d'article qui ne sont pas générés par la requête par défaut, tels que les pièces jointes.
  • Pour créer des pages personnalisées avec un certain nombre de requêtes pour différents types de contenu, comme je l'ai fait dans cet exemple de site pour un client.

Quelques mises en garde

le WP_Query la classe est super. Je crée beaucoup de sites nécessitant des requêtes personnalisées, je l'utilise donc fréquemment. Mais cela ne vient pas sans ses inconvénients. Voici quelques points à connaître:

  • Si vous souhaitez uniquement modifier la façon dont les publications sont affichées pour un type de contenu particulier ou une archive, n'utilisez pas WP_Query. Au lieu de cela, créez simplement un fichier de modèle pour cette archive ou ce type de contenu et modifiez la boucle dans ce fichier de modèle.
  • Si vous souhaitez afficher quelques articles de plus ou moins que ce qui serait normalement affiché sur une page d'archive (par exemple, ne présentant pas une catégorie particulière), n'utilisez pas WP_Query pour créer une toute nouvelle requête. Utilisez plutôt pre_get_posts pour modifier la requête principale, ainsi qu'une balise conditionnelle, afin d'indiquer exactement où vous voulez le faire.
  • Attention à ne pas exécuter trop de requêtes sur une page. Vous pouvez théoriquement créer une page avec des centaines de requêtes personnalisées, mais pensez simplement à la charge du serveur. Si vous avez besoin de plus de quatre ou cinq requêtes sur une page, vous pouvez envisager de créer des pages supplémentaires..

Résumé

le WP_Query class est un outil puissant et extrêmement utile pour créer des requêtes personnalisées et faire en sorte que votre site WordPress se comporte exactement comme vous le souhaitez. Comme nous l'avons vu, il est arrivé que vous utilisiez d'autres méthodes pour créer des requêtes personnalisées, mais son utilisation est très variée..

Dans le reste de cette série, nous vous expliquerons comment utiliser WP_Query et en tirer le maximum.