WP_Query est une classe de requête puissante dans WordPress, qui nous permet de personnaliser des articles de requête en fonction de la classification, de l'étiquette, de l'auteur, du temps et d'autres conditions. Il nous permet de trier les articles de différentes manières, par exemple par le temps de publication, l'ordre aléatoire ou par nombre de commentaires, qui est très puissant. Autrement dit, WP_Query est une instance de requête indépendante de la requête principale.
Dans WordPress, la requête principale est automatiquement générée par les demandes frontales, qui construit la requête en fonction des paramètres de l'URL et des valeurs par défaut dans les paramètres WordPress. Si nous avons besoin de requêtes plus raffinées, nous devons utiliser WP_Query pour effectuer des requêtes personnalisées.
Bien que WP_Query offre des fonctionnalités puissantes, dans la plupart des cas, nous n'avons qu'à effectuer des ajustements à petite échelle à la requête principale. Par exemple, l'exclusion de certaines catégories d'articles dans la boucle principale, ou seuls des articles d'auteurs spécifiques sont affichés. Lorsque vous utilisez directement WP_Query, il ignore les paramètres de la requête principale, ce qui peut entraîner des résultats de requête qui ne répondent pas à ceux attendus.
Par conséquent, nous devons fusionner WP_Query avec la requête principale afin que la requête personnalisée puisse hériter des paramètres de la requête principale et éviter les conflits de résultats de la requête.
Il existe deux façons de fusionner la requête principale et la requête personnalisée: l'une consiste à utiliser le crochet pre_get_posts dans Functions.php, et l'autre est de modifier les paramètres de requête directement dans le fichier de modèle. Chaque méthode présente ses avantages et ses inconvénients, et la méthode appropriée doit être sélectionnée en fonction des besoins spécifiques.
Pre_get_Posts est une fonction de crochet importante dans WordPress, qui nous permet de modifier les paramètres de requête avant l'interrogation. En utilisant la fonction Hook Pre_get_Posts dans le fichier functions.php, nous pouvons facilement modifier les paramètres de la requête principale pour réaliser l'effet que nous voulons.
Voici un exemple:
function my_custom_query($query) {
// Si ce n'est pas une requête d'arrière-plan et que c'est une requête principale,Modifier les paramètres de requête
if (!is_admin() && $query->is_main_query()) {
$query->set('cat', '-1,-2,-3'); // exclureIDpour1、2、3Classification
$query->set('author', '1'); // Ne montre queIDpour1Articles de l'auteur
}
}
add_action('pre_get_posts', 'my_custom_query');
Dans le code ci-dessus, nous modifions les paramètres de requête en utilisant la fonction $ query-> set (), atteignant ainsi la fonction d'exclusion des catégories spécifiques et d'affichage uniquement d'articles d'auteur spécifiques.
Si nous n'avons besoin que de modifications simples de la requête dans le fichier de modèle, nous pouvons modifier directement les paramètres de requête. C'est plus direct et simple. Par exemple:
// Code dans le modèle de page d'accueil
$featured_posts = new WP_Query(array(
'category_name' => 'featured', // Ne montre que特定分类的文章
'posts_per_page' => 5, // Ne montre que5Article
));
while ($featured_posts->have_posts()) {
$featured_posts->the_post(); // Afficher le titre de l'article、Contenu, etc.
}
// Restaurer la requête d'origine
wp_reset_postdata();
Dans le code ci-dessus, nous interrogeons les 5 premiers articles d'une catégorie spécifique en définissant les paramètres catégories_name et post_per_page. Dans le même temps, utilisez la fonction WP_RESET_POSTDATA () pour restaurer la requête d'origine pour éviter d'affecter les requêtes suivantes.
Que vous utilisiez le crochet Pre_get_Posts ou que vous modifiiez directement les paramètres de requête, vous devez faire attention aux points suivants:
La fusion de WP_Query avec les requêtes principales est une compétence très pratique dans le développement WordPress. Il nous aide à personnaliser plus précisément les requêtes et à éviter les conflits. Que ce soit en utilisant le crochet Pre_get_Posts ou en modifiant directement les paramètres de requête, il doit être utilisé raisonnablement pour éviter les effets secondaires inutiles.