Jusqu'à présent dans cette série, vous avez appris à utiliser WP_Query
pour créer des requêtes personnalisées à utiliser dans votre thème ou plugin.
Dans la plupart des cas, vous utiliserez WP_Query
et un tout nouvel ensemble de paramètres distincts des paramètres de la requête principale, mais que se passe-t-il si vous souhaitez inclure la requête principale dans les paramètres ?
Exemples d'endroits où vous pourriez vouloir faire cela :
Je pourrais continuer encore et encore, il existe de nombreuses possibilités de combiner la requête principale avec votre propre requête personnalisée.
Je vais démontrer cela avec trois exemples : le premier est simple avec une boucle ; le second utilisera foreach
pour générer plusieurs boucles, une pour chaque type de publication ; le troisième utilisera deux requêtes distinctes pour générer les deux types de publication sur la catégorie ; archive.
Cependant, si vous souhaitez combiner la requête principale avec WP_Query
结合起来,您需要以一种易于在 WP_Query
, vous devez stocker les arguments actuels de l'objet de requête d'une manière facile à utiliser dans
WP_Query
Faites ceci avant de définir le paramètre
$mainquery = get_queried_object();
get_queried_object()
La fonction renvoie l'objet actuellement interrogé, quel que soit cet objet. Sur une seule publication, il renverra uniquement l'objet de publication, tandis que sur une archive, il renverra une catégorie, une balise, un objet terme ou tout objet lié à l'archive. Il renvoie l'ID de l'objet de requête.
WP_Query
参数中使用此 $mainquery
Vous pouvez ensuite utiliser cette variable
$mainquery
dans le paramètre Exemple 1 : Afficher les publications d'un seul type de publication sur les pages de catégorieproduct
.
Votre requête pourrait ressembler à ceci : category_name
参数以类别 slug 作为参数,因此需要在变量后面添加 ->slug
<?php $mainquery = get_queried_object(); $args = array ( 'category_name' => $mainquery->slug, 'post_type' => 'product' ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); ?>
ci-dessus pour afficher le slug de catégorie. product
帖子类型的帖子。您可以在 category.php
de la base de données avec la catégorie de requête actuelle. Vous pouvez l'utiliser sur le modèle de page category.php
. pre_get_posts
Exemple 2 : requête principale combinée avec WP_Query et foreach pour générer plusieurs boucles
L'exemple suivant affichera toutes les publications de la page de catégorie actuelle, mais au lieu de les afficher toutes dans un seul bloc, il les séparera par type de publication.
Cela signifie que vous pouvez utiliser CSS pour classer les types de publications en blocs ou en colonnes sur la page, ou simplement les séparer en différentes listes.
Pour cela vous pouvez utiliser le code suivant : $mainquery
变量,但它还添加了一个 $post_types
变量来存储在网站上注册的所有帖子类型,以及一个 $post_type
<?php $mainquery = get_queried_object(); $post_types = get_post_types(); foreach ( $post_types as $post_type ) { $args = array( 'category_name' => $mainquery->slug, 'post_type' => $post_type ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); } ?>
Exemple 3 : deux requêtes distinctes pour deux types de publications
Le dernier exemple est similaire au second, mais divise le type de publication en deux requêtes distinctes, chacune avec sa propre boucle différente. Cela vous donne plus de contrôle sur ce qui apparaît sur chaque élément de contenu, afin que vous puissiez afficher vos publications différemment de vos produits, peut-être en incluant des images en vedette de vos produits ou en leur donnant une mise en page différente. product
et que les catégories soient activées pour celui-ci, et que vous rédigiez également un article 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 vous souhaitez afficher une liste de tous les produits de la même catégorie.
Pour ce faire, vous pouvez utiliser un code tel que :
<?php $mainquery = get_queried_object(); // First query arguments for posts. $args = array ( 'category_name' => $mainquery->slug, 'post_type' => 'post', 'posts_per_page' => '10' ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); // Second query arguments for products. $args = array ( 'category_name' => $mainquery->slug, 'post_type' => 'product', 'posts_per_page' => '-1' ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); ?>
RésuméWP_Query
L'exemple ci-dessus peut également être réalisé en utilisant d'autres types d'archives : pour la catégorie, l'auteur, la date, etc. Voyez si vous pouvez penser à plus de possibilités !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!