Bienvenue sur le blog de l'agence Soluka !

Retrouvez des articles dédiés aux nouveautés dans le développement web, rédigés par des passionnés, ainsi que les dernières actualités de l'agence.

Recherche

Articles populaires

Jeux Phaser

30/10/14

Utiliser les champs personnalisés dans une requête WP_Query

par Aymeric le 30 octobre 2014
R&D
Image Utiliser les champs personnalisés dans une requête WP_Query

Il arrive que dans certains fichiers de template WordPress, la boucle de base qui parcourt les articles (posts) ne colle pas au besoin. Par exemple, si vous souhaitez afficher certains articles sur votre page d’accueil dans un ordre particulier, il faut recourir à la classe WP_Query.

Très simple d’utilisation, la classe WP_Query permet de créer une requête pour récupérer les articles selon le tableau de critères défini en paramètres. Pour l’utiliser, il suffit d’instancier un objet de cette classe et de parcourir ce dernier de la manière suivante :

$query = new WP_Query($args);
if($query->have_posts()) : while($query->have_posts()) : $query->the_post();

endwhile;endif;
Créer une requête WP_Query

Pour chaque article, WordPress a prévu la possibilité d’associer des champs personnalisés. Disponibles depuis le back-office sur chaque article, ils correspondent à l’association d’une clé (meta_key) et d’une valeur (meta_value). Cette fonctionnalité du CMS WordPress est très pratique pour classifier, filtrer ou catégoriser les articles, sans passer par une catégorie ou un tag.

Par exemple, si l’on souhaite afficher sur la page d’accueil de son site, certains articles de son blog dans un ordre spécifique, on peut recourir aux champs personnalisés. De la même manière, si l’on souhaite afficher certains articles avec un code couleur particulier, on peut utiliser le même mécanisme.

Lorsque l’on développe un thème, on peut accéder aux valeurs d’un champ personnalisé à l’aide de la fonction get_post_meta().

WordPress, champs personnalisés

Comme nous venons de le voir précédemment, il est aisé de parcourir les articles avec la classe WP_Query et d’ajouter des champs personnalisés à ces derniers depuis le back-office. Il est possible de combiner les deux. Il suffit de passer en argument un tableau comprenant des filtres sur les champs personnalisés souhaités.

Ci-dessous quelques exemples d’utilisation de la classe WP_Query avec en paramètres des filtres sur les champs personnalisés.

Liste des articles qui possèdent un champ personnalisé avec une valeur spécifique

$args = array(
	'post_type' => 'post',
	'meta_key' => 'custom_order',
	'meta_value' => '5'
);

$query = new WP_Query($args);
Tous les articles qui possèdent le champ personnalisé avec la valeur 5

Liste des articles qui possèdent une valeur différente de la valeur spécifiée pour un champ personnalisé

$args = array(
	'post_type' => 'post',
	'meta_key' => 'custom_color ',
	'meta_value' => 'red',
	'meta_compare' => '!='
);

$query = new WP_Query($args);
Tous les articles qui possèdent une valeur différente de red pour custom_color

Liste des articles d’une catégorie, filtrés en fonction de la valeur numérique d’un champ personnalisé

$args = array(
	'post_type' => 'post',
	'cat' => 2,
	'orderby' => 'meta_value_num',
	'meta_key' => 'custom_order'
);

$query = new WP_Query($args);
Tous les articles de la catégorie 2 triés par ordre de valeur numérique pour custom_order

Liste des articles qui possèdent une valeur faisant partie du tableau de valeurs spécifiées pour un champ personnalisé

$args = array(
	'post_type' => 'post',
	'meta_key' => 'custom_color',
	'meta_value' => array('red', 'blue'),
	'meta_compare' => 'IN'
);

$query = new WP_Query($args);
Tous les articles qui possèdent la valeur red ou blue pour le champ personnalisé custom_color

Liste des articles qui possèdent une valeur supérieure ou égale à la valeur spécifiée pour un champ personnalisé

$args = array(
	'post_type' => 'post',
	'meta_key' => 'custom_order',
	'meta_value' => 5,
	'meta_compare' => '>=',
	'meta_type' => 'numeric'
);

$query = new WP_Query($args);
Tous les articles qui possèdent une valeur supérieure ou égale à 5 pour custom_order