Jusqu'à présent dans cette série, vous avez appris à utiliser WP_Query
créer des requêtes personnalisées à utiliser dans votre thème ou vos plugins.
Dans la plupart des cas, vous utiliserez WP_Query
avec un tout nouvel ensemble d'arguments distincts de ceux de la requête principale, mais que faire si vous souhaitez inclure la requête principale dans vos arguments?
Voici quelques exemples de ce que vous voudrez peut-être faire:
Je pourrais continuer, il existe de nombreuses possibilités de combiner la requête principale avec votre propre requête personnalisée.
Je vais illustrer cela avec trois exemples: le premier sera un exemple simple avec une boucle; la seconde utilisera pour chaque
pour générer plusieurs boucles, une pour chaque type de publication; et le troisième générera deux types de publication sur une archive de catégorie en utilisant deux requêtes distinctes.
Cependant, vous allez combiner votre requête principale avec WP_Query
, vous devez stocker l’objet de requête actuel d’une manière qui le rend facile à utiliser dans votre WP_Query
arguments. Le moyen le plus simple de le faire est de l’affecter à une variable.
Vous faites cela avant de définir votre WP_Query
arguments, comme si:
$ mainquery = get_queried_object ();
le get_queried_object ()
fonction renvoie l'objet actuellement interrogé, quel qu'il soit. Sur un seul post, il retournera simplement l'objet post, tandis que sur une archive, il renverra la catégorie, la balise, l'objet term ou tout objet en rapport avec l'archive. Il retourne l'ID de l'objet interrogé.
Vous pouvez ensuite utiliser cette $ mainquery
variable dans votre WP_Query
arguments. Voyons maintenant quelques exemples..
Supposons qu'un type d'article personnalisé soit ajouté à votre site et que vous ayez activé les catégories pour ce type d'article personnalisé. Dans l'archive des catégories de chaque catégorie, vous ne souhaitez pas afficher les publications. Vous souhaitez plutôt afficher les publications de votre nouveau type de publication. Appelons-la. produit
.
Votre requête pourrait ressembler à ceci:
$ mainquery-> slug, 'post_type' => 'product'); // requête personnalisée. $ query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ query-> 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 (); ?>
Parce que le Nom de catégorie
paramètre que j'ai utilisé ci-dessus prend la catégorie slug comme argument, vous devez ajouter -> limace
après la variable pour sortir le slug de catégorie.
Cela vous donne une requête qui va chercher les messages de la produit
postez le type de la base de données avec la catégorie actuellement interrogée. Vous l'utiliseriez sur le catégorie.php
modèle de page.
Remarque: Vous pouvez également obtenir ce résultat en utilisant le pre_get_posts
crochet pour modifier la requête principale, combiné avec une fonction conditionnelle pour vérifier les archives de catégorie.
L'exemple suivant affichera tous les articles de la page de catégorie en cours, mais au lieu de les afficher tous dans un bloc, ils seront séparés par type d'article..
Cela signifie que vous pouvez trier vos types d'articles en blocs ou en colonnes sur votre page à l'aide de CSS, ou simplement les séparer en différentes listes..
Pour ce faire, vous utiliseriez le code suivant:
$ mainquery-> slug, 'post_type' => $ post_type); // requête personnalisée. $ query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ query-> 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 (); ?>
Cela utilise le $ mainquery
variable nous avons utilisé auparavant, mais il ajoute également un $ post_types
variable pour stocker tous les types de message enregistrés sur le site, et un $ post_type
variable pour stocker chaque type de poste individuellement.
Le dernier exemple est similaire au second, mais sépare les types de publication en deux requêtes distinctes, chacune avec sa propre boucle distincte. Cela vous donne plus de contrôle sur ce qui est affiché pour chacun, vous pouvez donc afficher les articles différemment des produits, en incluant éventuellement une image sélectionnée pour les produits ou en leur donnant une présentation différente..
Disons que votre site a le produit
poste enregistré, avec les catégories activées, et vous écrivez également des articles de blog avec les mêmes catégories. Sur chaque page d'archive de catégorie, vous souhaitez afficher les dix publications les plus récentes, puis une liste de tous les produits de la même catégorie..
Pour ce faire, vous utiliseriez quelque chose comme ce code:
$ mainquery-> slug, 'post_type' => 'post', 'posts_per_page' => '10'); // requête personnalisée. $ query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ query-> 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 (); // Deuxième argument de requête pour les produits. $ args = array ('category_name' => $ mainquery-> slug, 'post_type' => 'product', 'posts_per_page' => '-1'); // requête personnalisée. $ query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ query-> 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 (); ?>
Vous écririez ensuite chaque boucle différemment pour générer des données différentes pour chaque type de publication..
Comme vous pouvez le voir dans les exemples ci-dessus, il est possible d'utiliser WP_Query
non seulement pour créer des requêtes complètement personnalisées, séparées de la requête principale, mais également pour incorporer l'objet actuellement interrogé et créer des requêtes plus puissantes sur les pages d'archive.
Les exemples ci-dessus peuvent également être réalisés avec d'autres types d'archives: pour les taxonomies, les auteurs, les dates, etc. Voyez si vous pouvez trouver plus de possibilités!