WP_Query Arguments Taxonomies

Jusqu'ici dans cette série, vous avez appris comment WP_Query est structuré et quelles sont ses propriétés et méthodes. Nous examinons maintenant les différents arguments que vous pouvez utiliser avec WP_Query et comment vous les codez.

WP_Query a un grand nombre d’arguments possibles, ce qui le rend extrêmement flexible. Comme vous pouvez l'utiliser pour interroger à peu près tout ce qui se trouve dans votre wp_posts table, il a des arguments pour chaque permutation de requête que vous pourriez vouloir exécuter sur votre contenu.

Dans ce tutoriel, je vais examiner les arguments permettant d'interroger des termes de taxonomie..

Récapitulation du fonctionnement des arguments dans WP_Query

Avant de commencer, récapitulons brièvement le fonctionnement des arguments dans WP_Query. Quand vous codez WP_Query Dans vos thèmes ou plugins, vous devez inclure quatre éléments principaux:

  • les arguments de la requête, en utilisant des paramètres qui seront abordés dans ce tutoriel
  • la requête elle-même
  • la boucle
  • finition: fermeture si et tandis que balises et réinitialisation des données de publication

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 (); ?>

Les arguments sont ce qui indique à WordPress quelles données extraire de la base de données et ce sont celles que je vais couvrir ici. Nous nous concentrons donc sur la première partie du code:

$ args = array (// Arguments pour votre requête.);

Comme vous pouvez le constater, les arguments sont contenus dans un tableau. Vous apprendrez à les coder au fil de ce didacticiel..

Coder vos arguments

Il existe un moyen spécifique de coder les arguments du tableau, comme suit:

$ args = array ('paramètre1' => 'valeur', 'paramètre2' => 'valeur', 'paramètre3' => 'valeur');

Vous devez mettre les paramètres et leurs valeurs entre guillemets simples, utilisez => entre eux, et séparez-les avec une virgule. Si vous vous trompez, WordPress peut ne pas ajouter tous vos arguments à la requête ou vous pouvez obtenir un écran blanc..

Les paramètres de taxonomie

La définition des paramètres pour les termes de taxonomie est un peu plus compliquée que pour les catégories et les balises puisque vous utilisez tax_query. Dans cet argument, vous écrivez un tableau imbriqué d'arguments pour spécifier la taxonomie et le terme à l'aide de ces paramètres:

  • taxonomie (chaîne): Taxonomie.
  • champ (chaîne): Sélectionnez le terme de taxonomie par ('term_id (défaut), 'prénom' ou 'limace').
  • termes (int / string / array): Terme (s) de taxonomie.
  • include_children (booléen): Inclure ou non les enfants dans les taxonomies hiérarchiques. La valeur par défaut est true.
  • opérateur (chaîne): Opérateur à tester. Les valeurs possibles sont 'DANS' (défaut), 'PAS DEDANS', 'ET'.

Le fait que vous ayez le opérateur paramètre signifie que vous n'avez pas besoin de choisir parmi une plage d'arguments disponibles pour définir si vous incluez ou non des termes (comme pour les balises et les catégories), mais utilisez tax_query pour tout ce qui concerne la taxonomie à la place.

Si vous souhaitez interroger plusieurs taxonomies, vous pouvez également utiliser le relation paramètre avant tous vos tableaux (un pour chaque taxonomie) avec ET ou OU pour spécifier si vous voulez trouver des messages avec tous les termes ou n'importe lequel d'entre eux.

Ceci est plus facilement expliqué avec quelques exemples.

Interrogation pour un terme de taxonomie

C'est le scénario le plus simple et implique l'utilisation d'un seul tableau imbriqué:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => 'my-term-slug',)) ;

Les requêtes ci-dessus pour les publications avec le mon-terme-limace terme dans le ma-taxonomie taxonomie. Notez que vous devez également utiliser le champ paramètre pour identifier le champ que vous utilisez pour identifier le terme, sauf si vous utilisez le terme ID qui est le mot par défaut. Si vous voulez utiliser le terme ID, vous utiliseriez quelque chose comme ceci:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => '11')));

L'utilisation de l'ID vous empêche d'identifier plus tard ce que votre requête recherche, mais évite tout problème éventuel si vous pensez que vos utilisateurs risquent de modifier le terme slug..

Interrogation de plusieurs termes dans une taxonomie

Si vous souhaitez identifier les publications avec un ou plusieurs tableaux de termes de la même taxonomie, vous écrivez toujours un tableau imbriqué, mais ajoutez un tableau de termes..

Par exemple, pour interroger des publications avec tout d'une liste d'identifiants de termes de votre taxonomie, vous utilisez:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'))));

Mais si vous vouliez interroger les publications avec tout de ces termes? Vous aurez besoin d'utiliser le opérateur paramètre dans votre tableau imbriqué:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'AND' ));

Notez que le premier exemple utilise réellement le DANS opérateur pour trouver les publications avec n'importe lequel des termes, mais comme il s'agit du paramètre par défaut, vous n'avez pas à le spécifier dans vos arguments.

Un autre scénario est si vous souhaitez interroger des publications qui n'ont aucun tableau de termes dans une taxonomie, comme ceci:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12',) ',' operator '=>' NOT IN ' )));

Ici j'ai remplacé le ET opérateur avec PAS DEDANS, ce qui signifie que WordPress trouvera des publications sans aucun des termes du tableau.

Notez que si vous préférez utiliser des slugs plutôt que des identifiants de terme, vous pouvez le faire avec n'importe lequel de ces scénarios. Le dernier exemple ressemblerait à ceci:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => array ('my-slug', 'votre- slug '),' operator '=>' NOT IN ')));

Un autre scénario consiste à rechercher des publications comportant un terme mais pas un autre. Cela utilise le DANS opérateur (que vous n'avez pas besoin d'inclure car c'est la valeur par défaut), avec un signe moins devant l'ID des termes que vous souhaitez exclure:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '-12'))));

Cette requête poste avec terme 11 mais pas terme 12.

Interrogation des termes de plusieurs taxonomies

Si vous souhaitez travailler avec plus d'une taxonomie, vous devez créer plusieurs tableaux. Regardons l'exemple le plus simple, pour interroger les publications avec un terme de taxonomy1 et un terme de taxonomie2:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Ici, j'ai écrit deux tableaux imbriqués: un pour chaque taxonomie, en utilisant les mêmes arguments que pour les exemples utilisant une seule taxonomie. J'ai précédé ces avec le relation argument. Vous devez inclure le relation argument permettant d'indiquer à WordPress s'il recherche tout ou partie des publications de chaque tableau. Cela fonctionne comme suit:

  • Si tu utilises 'relation' => 'AND', WordPress va récupérer les articles spécifiés dans le premier tableau et le deuxième tableau. Ainsi, dans l'exemple ci-dessus, seules les publications avec tous les deux la limace un limace dans taxonomie1 et le limace deux limace dans taxonomie2 sera interrogé.
  • Si tu utilises 'relation' => 'OU', WordPress récupérera les posts du premier tableau ou le deuxième tableau. Donc, dans ce cas, vous aurez des messages avec non plus la limace un limace ou le limace deux limace (ou les deux).

C'est le code que vous utiliseriez si vous recherchiez des publications avec l'une ou l'autre des deux limaces:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Vous pouvez également rechercher plus d'un terme dans une taxonomie donnée en l'ajoutant au tableau:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ',' slug-three '))));

En combinant les relation argument avec des requêtes imbriquées utilisant également le opérateur argument, vous pouvez créer des requêtes assez complexes. Les arguments ci-dessous interrogeraient les publications avec un terme d'une taxonomie mais sans un terme d'une autre taxonomie:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one '),' operator '=>' NOT IN '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ')) ));

Notez que j'ai utilisé 'relation' => 'AND' ici: si j'ai utilisé OU, il interrogerait les messages avec limace deux et messages sans limace un, plutôt que des messages qui ont limace deux mais non limace un, c'est ce que je cherche. 

Vous pourriez peut-être aller plus loin en interrogeant les termes de votre taxonomie comme bon vous semble: en utilisant le opérateur argument dans les deux requêtes imbriquées ou ajout d'une requête imbriquée supplémentaire pour interroger des termes dans une autre taxonomie.

Une note sur l'argument fiscal

Vous vous demandez peut-être pourquoi je n'ai pas inclus le impôt argument, où vous écrivez simplement votre argument comme suit:

$ args = array ('taxonomy1' => 'slug-one');

Vous connaissez peut-être cette méthode d’interrogation des taxonomies si vous l’avez déjà fait, mais elle est maintenant obsolète et vous ne devriez pas l’utiliser. Alors tenez-vous en à 'tax_query'! En utilisant tax_query vous donne quand même beaucoup plus de flexibilité.

Résumé

Interroger les taxonomies est un peu plus compliqué que les catégories et les balises, car vous devez vous familiariser avec les tax_query argument.

Cependant, comme nous l’avons vu, c’est un argument très puissant qui vous donne beaucoup de latitude et de souplesse pour interroger votre base de données de la manière que vous souhaitez..