WP_Query est une classe PHP dans WordPress qui charge le contenu de la base de données. Les développeurs s’appuient sur WP_Query pour créer des listes de contenu personnalisées qui s’affichent sur le front-end du site.
Pour comprendre le fonctionnement de WP_Query, regardons un exemple. Voici une page qui affiche trois tours « promus »:
Vous devez utiliser WP_Query pour charger ces publications de visites à partir de la base de données. Nous allons montrer comment créer cette liste de deux manières:
- Utilisation de WP_Query via le code PHP (nécessite une programmation)
- Utilisation de WP_Query à l’aide de l’interface graphique du jeu d’outils (aucune programmation nécessaire)
Utilisation de WP_Query avec le code PHP
Le code ci-dessous est la partie requête. Ici, WP_Query charge trois « tours » aléatoires de la base de données qui correspondent aux critères.
Tout d’abord, le code construit un tableau d’arguments (argargs), qui inclut tous les détails de la requête que nous devons exécuter. Ensuite, nous appelons la classe WP_Query et lui demandons de renvoyer les éléments (tours) qui correspondent aux arguments.
function display_promoted_tours(){ // Create an array of arguments, which will tell WP_Query what information to load from the database $args = array( 'post_type' => 'tours', 'post_status' => 'publish', 'limit' => 3, 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'tour-status', 'field' => 'slug', 'terms' => array( 'promoted' ), 'operator' => 'IN' ) ), 'meta_query' = array( 'relation' => 'AND', array( 'key' => 'wpcf-valid-until', 'value' => strtotime( 'today 00:00' ), 'type' => 'NUMERIC', 'compare' = '>' ) ) ); // Call WP_Query and load the content from the database $my_query = new WP_Query( $args ); // Now display the "tours" if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); echo "<div class='card'>"; if ( has_post_thumbnail() ) : echo "<a href='" . get_the_permalink() . "' title='" . the_title(null,null,false) . "'>" . get_the_post_thumbnail() . "</a>"; endif; echo the_title( '<h3>', '</h3>', false); echo "<button class='button-style'><a href='" . get_the_permalink() . "'>Learn more</button>"; echo "</div>"; endwhile; wp_reset_postdata(); endif;}
Maintenant, vous avez le code qui charge le contenu de la base de données et l’affiche sur le front-end. La dernière étape consiste à ajouter ce code à l’un des modèles de votre thème, afin qu’il s’exécute sur la page où vous souhaitez qu’il apparaisse.
Pour ce faire, vous devrez suivre ces étapes supplémentaires:
- Créez un thème enfant, afin de ne pas modifier directement les fichiers du thème (causant des problèmes de mise à jour futures)
- Copiez la page du thème.modèle php et renommez-le
- Modifiez le nouveau fichier de modèle et appelez display_promoted_tours à partir de celui-ci
- Depuis l’administrateur WordPress, éditez la page qui devrait afficher cette liste de visites et configurez-la pour utiliser le nouveau modèle
Ce processus fonctionne bien, mais comme vous pouvez le voir, il nécessite une bonne quantité de codage et de débogage. Si vous êtes intéressé par la version sans PHP de ce processus, qui prend quelques minutes au lieu de quelques jours, continuez à lire.
Créer une requête avec l’interface graphique du jeu d’outils
Utilisons le même exemple de site Web de voyage que ci-dessus et créons une requête en utilisant le jeu d’outils au lieu du codage PHP.
Ci–dessous est le même exemple que ci-dessus mais cette fois sans utiliser de jeu d’outils de codage.
- Insérez le bloc Éditeur de vues où vous souhaitez que la liste apparaisse
- Choisissez le contenu que vous souhaitez charger
- Concevez l’apparence de la liste
Dans cet exemple, la vue affiche les résultats de la requête sous forme de grille. Vos Vues peuvent afficher les résultats de n’importe quelle manière, même sous forme de marqueurs sur les cartes.
Ajout d’une pagination aux requêtes
Lorsque vous souhaitez créer une longue liste de contenu, vous pouvez la décomposer en ajoutant une pagination.
Pour afficher les résultats en pages, au lieu d’une longue liste, vous devrez ::
- Activer la pagination pour la vue
- Concevoir les commandes de pagination
Création de recherches personnalisées
En plus d’afficher les résultats sous forme de liste, vous pouvez également utiliser des requêtes pour créer des recherches personnalisées. La recherche personnalisée ajoute des contrôles frontaux qui permettent aux utilisateurs de filtrer les résultats et de trouver le contenu exact qu’ils recherchent.
Affichage des résultats de la requête sur une carte
Si vos messages ont un champ d’adresse personnalisé, vous pouvez les afficher sur une carte.
Limitation et filtrage des requêtes
Les requêtes que vous créez n’ont pas à charger à partir de la base de données tous les éléments du type que vous avez sélectionné. Vous pouvez limiter et filtrer les requêtes pour renvoyer les résultats exacts que vous souhaitez obtenir.
Par exemple, vous pouvez créer des requêtes qui vont:
- Retourne les premiers résultats
- Filtre les résultats en fonction des valeurs des champs personnalisés et de la taxonomie
- Filtre les résultats en fonction de la relation post
- Filtre les résultats en fonction des entrées sur le front-end (créer une recherche personnalisée)