Boucle / requête personnalisée basée sur des champs personnalisés - Astuces CSS

Anonim
Dernière mise à jour par Jason Witt.

Si vous concevez ou développez des thèmes ou des plugins WordPress, il y a de fortes chances qu'un jour vous ayez besoin de faire une requête pour les champs méta personnalisés. Ce sont ces paires clé / valeur entièrement personnalisées que vous pouvez attacher à n'importe quel article, page ou type d'article personnalisé. WordPress a une interface utilisateur de base pour eux par défaut, ou vous pouvez utiliser quelque chose comme les champs personnalisés avancés pour les utiliser. Mais sous le capot, ACF utilise des champs personnalisés classiques.

Cette page d'extrait de code que vous regardez actuellement a été écrite en 1999. À cette époque, pour rechercher des articles avec des champs personnalisés particuliers, vous auriez besoin d'utiliser la variable globale `$ wpdb`. Cela peut être utilisé pour créer des requêtes MySQL que la classe WordPress WP_Query () ne prend pas en charge. Heureusement, aujourd'hui, WordPress a des arguments qui prennent en charge les requêtes pour les champs méta personnalisés.

Ici, nous allons couvrir les différentes façons dont vous pouvez demander et boucler des articles avec des champs personnalisés particuliers (et leurs valeurs). Vous pourrez utiliser ces informations que vous utilisiez la WP_Queryclasse query_posts(), ou get_posts(). Depuis query_posts()et get_posts()sont des wrappers pour la WP_Queryclasse. Ils acceptent tous les mêmes arguments.

Les arguments de requête

Voici un exemple de base d'une requête WordPress tirée du Codex WordPress.

have_posts() ) ( echo '
    '; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();

C'est $argslà le plus important. Nous passerons différents arguments pour que cela fonctionne comme nous le souhaitons.

Lors de la recherche de méta personnalisées, vous pouvez utiliser deux «groupes» d'arguments. Un groupe est destiné à une simple requête de champ de méta personnalisé et l'autre groupe de requêtes de champs de méta personnalisés plus complexes. Commençons par le groupe simple.

meta_key

L' meta_keyargument interrogera toute publication dont le méta-ID de champ personnalisé est enregistré dans la base de données, qu'il y ait ou non une valeur enregistrée pour le champ. C'est meta_keyl'identifiant que vous donnez à vos champs méta. Comme ça:

Cet exemple interrogera toute publication qui a le champ méta personnalisé avec l'ID «champ1».

$args = array( 'meta_key' => 'field1' );

meta_value

L' meta_valueargument interroge la publication qui a la valeur que vous définissez. L' meta_valueargument est utilisé pour les valeurs de chaîne. Cet exemple interrogera tous les articles avec un champ méta personnalisé qui a la valeur «data1».

$args = array( 'meta_value' => 'data1' );

Vous pouvez également combiner les deux. Cet exemple interrogera uniquement les publications qui ont le champ méta personnalisé avec l'ID «champ1» qui a la valeur «data1».

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

meta_value_num

L'argument meta_value_num est similaire à l'argument `meta_value`. Là où l' meta_valueargument est pour les valeurs de chaîne, il meta_value_numest destiné aux valeurs numériques.

Cet exemple montre comment interroger le champ méta personnalisé «champ1» s'il a une valeur de «10».

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

meta_compare

L' meta_compareargument fait exactement ce à quoi il ressemble. Cela vous permettra d'utiliser des comparateurs avec les arguments `meta_value` et` meta_value_num`. Les comparateurs que vous pouvez utiliser sont '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' ou 'RLIKE'. Voici un exemple qui montre comment interroger les publications qui n'ont pas la valeur "data1".

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

Requêtes plus complexes

meta_query

Le principal argument que vous utiliserez pour les requêtes complexes est meta_query. Cet argument à lui seul ne fait rien. Il indique simplement à WordPress que vous souhaitez créer une requête pour les champs méta personnalisés. Vous allez ajouter des arguments supplémentaires meta_queryqui seront utilisés pour définir la requête.

clé, valeur et comparaison

Les arguments key, valuefonctionnent exactement de la même manière que meta-key, meta-valuecomme décrit ci - dessus. Le complexe compareest similaire au simple compareci-dessus, mais il faut une liste différente de comparateurs. Le complexe compareutilise '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NOT ENTRE ',' EXISTS 'ou' NOT EXISTS '. valuepeut être un tableau, mais uniquement lorsque comparer utilise «IN», «NOT IN», «BETWEEN» ou «NOT BETWEEN».

Si vous utilisez «EXISTS» ou «NOT EXISTS» avec compare, vous n'avez pas besoin de spécifier d' valueargument.

Voici un exemple qui interrogera les articles s'ils ont «field1» avec la valeur «data1» et «field2» avec la valeur qui n'est pas «data2».

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

relation

Le relationest utilisé lorsque vous souhaitez interroger des métadonnées personnalisées à l'aide d'une relation logique. Vous pouvez utiliser ANDou OR. Par exemple, vous utiliserez ANDpour comparer si data1 et data2 répondent aux critères, et vous utiliserez ORsi data1 ou data2 répondent aux critères.

Cet argument est autonome. Cela signifie qu'il n'apparaît pas dans les paramètres d'un champ méta personnalisé individuel. Regardons un exemple. Cet exemple n'interrogera que les publications qui ont «champ1» avec la valeur «data1» et «champ2» avec la valeur «data2».

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

Si vous avez changé relationen «OU». Ensuite, il interrogera tous les messages si «champ1» a la valeur «data1», ou si «champ2» a la valeur «data2».

taper

L' typeargument vous permet de choisir le type de données à interroger. Vous pouvez utiliser «NUMERIC», «BINARY», «CHAR», «DATE», «DATETIME», «DECIMAL», «SIGNED», «TIME» ou «UNSIGNED».

Le type «DATE» ne peut être utilisé avec compare«BETWEEN» que si le format de date est «AAAAMMJJ».

Cet exemple interrogera n'importe quel article où la valeur de «champ1» est numérique.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

Exemple du monde réel

Jusqu'à présent, je n'ai donné que des exemples avec des données et des champs arbitraires. Maintenant, j'aimerais vous montrer un exemple concret d'interrogation de champs méta personnalisés.

Le scénario

Vous avez créé un type de publication d'événement personnalisé. Le type de publication d'événements a un champ personnalisé de date avec l'ID de event_date. Vous souhaitez créer une requête qui affichera tous les événements qui commenceront à la date actuelle dans les 30 prochains jours.

Nous allons utiliser l' meta_queryargument car nous voulons utiliser l' typeargument pour définir le champ "event_date" comme type de données "DATE".

Voici la requête:

$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );

Le valueest un tableau de la date actuelle - 1 jour et 31 jours à partir de la date actuelle. Puisque nous utilisons le comparateur «BETWEEN», seuls les messages entre le tableau de valeurs seront interrogés, nous voulons donc les compenser d'un jour.

Avec cette requête, vous afficherez tout événement survenant dans les 30 prochains jours.

Conclusion

La WP_Queryclasse est une classe très flexible qui vous permettra de créer une multitude de requêtes personnalisées. Si vous voulez en savoir plus sur les différents arguments que vous pouvez utiliser pour les requêtes, je vous recommande de parcourir la WP_Querypage du codex.