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:
WP_Query
?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:
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..
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..
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
.
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:
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:
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:
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.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.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.