Vous souhaitez afficher une publication WordPress uniquement si elle comporte un champ personnalisé spécifique ?
Les champs personnalisés sont une fonctionnalité pratique de WordPress qui vous permet d’ajouter des informations supplémentaires à vos publications et pages WordPress. Vous pourriez souhaiter filtrer votre contenu en fonction de vos champs personnalisés.
Dans cet article, nous allons vous afficher comment afficher une publication WordPress uniquement si elle possède un champ personnalisé spécifique.
Pourquoi afficher les publications WordPress avec un champ personnalisé spécifique ?
Lorsque vous créez un article sur votre site WordPress, vous pouvez utiliser des champs personnalisés pour ajouter des métadonnées supplémentaires à la publication. Les métadonnées sont des informations sur la publication, telles que le titre, l’auteur/autrice et la date de publication.
Les champs personnalisés sont un concept avancé de WordPress, et il existe de nombreuses façons d’ajouter des champs personnalisés dans WordPress, notamment en utilisant l’ extension Advanced Custom Fields (ACF).
Vous trouverez de nombreux conseils utiles sur l’utilisation et l’affichage des champs personnalisés dans notre publication, WordPress Custom Fields 101 : Tips, Tricks, and Hacks.
Un de nos utilisateurs/utilisatrices nous a demandé comment afficher les publications WordPress uniquement si un champ personnalisé spécifique est présent. Cela peut être utile si vous cherchez à créer une page personnalisée qui répertorie toutes les publications qui contiennent un champ personnalisé spécifique et/ou une valeur.
Après avoir répondu, nous avons pensé qu’il serait préférable de partager cette réponse avec tous les autres afin que la communauté WordPress.org puisse en bénéficier.
Modifier les fichiers de votre thème WordPress : Ce qu’il faut garder à l’esprit
Pour pouvoir suivre correctement ce tutoriel, voici quelques éléments à garder à l’esprit :
- Ce tutoriel implique de modifier les fichiers de votre thème WordPress avec du code, il n’est donc pas le plus adapté pour les débutants complets. Si vous êtes nouveau dans ce domaine, vous devrez lire notre guide sur la façon de copier et coller du code dans WordPress.
- Nous vous recommandons de sauvegarder votre site et/ou d’utiliser un environnement staging afin que votre site direct ne soit pas affecté en cas d’erreur. En effet, vous allez ajouter du code aux fichiers de votre thème, ce qui peut être risqué.
- Nous vous recommandons de comprendre comment fonctionne la hiérarchie des fichiers modèles de WordPress afin de savoir où ajouter le code ultérieurement.
- Vous devrez également vous familiariser avec le fonctionnement des boucles WordPress, car nous appellerons ces paramètres dans une requête WordPress.
Par ailleurs, notez que ce tutoriel fonctionne uniquement avec les thèmes WordPress classiques, car les thèmes par blocs ont un ensemble différent de fichiers de thème.
Ceci étant dit, voyons comment afficher une publication WordPress uniquement si elle possède un champ personnalisé spécifique.
Afficher une publication WordPress uniquement si elle contient un champ personnalisé spécifique
Avant de vous afficher le code à utiliser, vous devez savoir à quel fichier du thème vous devez l’ajouter. Le plus souvent, il s’agira d’un modèle de page, tel que index.php, archive.php ou page.php.
Disons que vous voulez l’ajouter au fichier index.php du thème Twenty Twenty-One. Voici à quoi ressemble actuellement la partie de ce fichier consacrée à la boucle WordPress :
<?php
if ( have_posts() ) {
// Load posts loop.
while ( have_posts() ) {
the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// Previous/next page navigation.
twenty_twenty_one_the_posts_navigation();
} else {
// If no content, include the "No posts found" template.
get_template_part( 'template-parts/content/content-none' );
}
get_footer();
Ce code utilise la boucle par défaut de WordPress(have_posts()
et the_post()
) pour afficher les publications. Cette méthode convient à la plupart des thèmes WordPress standard et permet d’afficher les publications sans aucun filtre ou tri personnalisé.
Imaginons maintenant que vous utilisiez le champ personnalisé « color » comme dans l’exemple ci-dessus. Vous devrez remplacer l’intégralité de ce code par l’extrait ci-dessous :
<?php
// The Query to show a specific Custom Field
$the_query = new WP_Query('meta_key=color');
// Load posts loop.
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// Previous/next page navigation.
twenty_twenty_one_the_posts_navigation();
} else {
// If no content, include the "No posts found" template.
get_template_part( 'template-parts/content/content-none' );
}
// Reset Post Data
wp_reset_postdata();
get_footer();
Dans ce nouveau code, nous avons introduit une requête personnalisée($the_query = new WP_Query('meta_key=color') ;
) pour récupérer les publications basées sur la valeur d’un champ personnalisé spécifique (dans ce cas, les publications avec un champ personnalisé ‘color’).
Il utilise ensuite une boucle personnalisée(if ($the_query->have_posts()
)) pour itérer sur les publications obtenues par cette requête personnalisée, en affichant le contenu de chaque publication de la même manière que dans le premier extrait.
Nous avons également ajouté la fonctionwp_reset_postdata()
pour nous assurer que WordPress affiche à nouveau toutes les publications correctement après la requête personnalisée. Cela permet de s’assurer que le site fonctionne bien et affiche le bon contenu aux utilisateurs/utilisatrices.
Maintenant, si vous voulez afficher des publications spécifiques qui ont un champ personnalisé avec une valeur spécifique, il vous suffit de modifier la requête de la ligne 3 comme suit :
$the_query = new WP_Query( 'meta_value=blue' );
Ceci affichera toutes les publications qui ont une valeur ‘bleu’ dans un champ personnalisé.
Si vous voulez vous assurer que le champ « color » contient la valeur « blue », votre code de requête ressemblera à ceci :
$the_query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
Pour en savoir plus sur les paramètres supplémentaires que vous pouvez utiliser dans votre requête, consultez la page de référence du code WP_Query de WordPress.
Une fois que vous avez enregistré le code dans le fichier PHP du modèle de page, vous pouvez consulter votre site WordPress sur l’interface publique pour voir votre code en action.
Nous espérons que ce tutoriel vous a aidé à apprendre comment afficher une publication WordPress uniquement si elle possède un champ personnalisé spécifique. Vous pouvez également consulter notre guide complet sur le référencement WordPress ou consulter notre liste des meilleurs plugins WordPress pour développer votre site.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Syed Balkhi says
Hey WPBeginner readers,
Did you know you can win exciting prizes by commenting on WPBeginner?
Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
You can get more details about the contest from here.
Start sharing your thoughts below to stand a chance to win!
ahmed says
i have a question sir if i want to display single post and custom fields then what i should do.
i dont want to display the post with specific custom fields. i want to display all custom fields of post
Dave101 says
Hi, thank for the useful tutorial. I have a question, in a wordpress website i set a meta value named « meta_country » and then i set every post with the country of the article, like « us », « uk », « fr »… Now I’m trying to add somewhere in the home of the blog a link that show list of all post with a specific country and a specific tag. For example all « UK » post tagged « APPLE ».
I don’t understand how to do that, someone could help me?
Максим Каминский says
great thanks, it help wery well!
pjhooker says
Thx!
Eduard Unruh says
omg finally THANKS!
Mario M says
I wasnt able to generate any results unless I included « post_type » parameter into the query.
ie: $the_query = new WP_Query(‘post_type=page&meta_key=color’);
sacha says
Wonderful, just so simple and clean.
Thank you.
scottlee.me says
@ad Great question! I’m curious too.
ad says
Hi,
How could I show posts that DON’T have a specific Custom Field? Any idea?
Thanks!!!
tara tin says
as I know from php it must be meta_key!=’your key’
;just you need to know that « ! » means « not »
brunobruno2 says
Beatiful! Many thanks for sharing it. Works like a charm.