WP_Query ist eine leistungsstarke Abfrageklasse in WordPress, mit der wir Abfrageartikel basierend auf Klassifizierung, Etikett, Autor, Zeit und anderen Bedingungen anpassen können. Es ermöglicht uns, Artikel auf unterschiedliche Weise zu sortieren, z. B. nach Veröffentlichungszeit, zufälliger Reihenfolge oder nach Anzahl der Kommentare, was sehr mächtig ist. Einfach ausgedrückt ist WP_Query eine Abfrageinstanz unabhängig von der Hauptabfrage.
In WordPress wird die Hauptabfrage automatisch durch Front-End-Anforderungen generiert, wodurch die Abfrage basierend auf den Parametern in der URL und den Standardwerten in WordPress-Einstellungen erstellt wird. Wenn wir raffiniertere Abfragen benötigen, müssen wir WP_Query verwenden, um benutzerdefinierte Abfragen durchzuführen.
Obwohl WP_Query leistungsstarke Funktionen liefert, müssen wir in den meisten Fällen nur kleine Anpassungen an der Hauptabfrage vornehmen. Beispielsweise werden mit Ausschluss bestimmter Kategorien von Artikeln in der Hauptschleife oder nur Artikel aus bestimmten Autoren angezeigt. Bei direkter Verwendung von WP_Query ignoriert es die Parameter der Hauptabfrage, die zu Abfrageergebnissen führen können, die den erwarteten nicht entsprechen.
Daher müssen wir WP_Query mit der Hauptabfrage zusammenführen, damit die benutzerdefinierte Abfrage die Parameter der Hauptabfrage erben und Abfrageergebnissekonflikte vermeiden können.
Es gibt zwei Möglichkeiten, die Hauptabfrage und die benutzerdefinierte Abfrage zusammenzuführen: Einer erfolgt mit dem Pre_Get_Posts -Hook in Funktionen.php, und der andere besteht darin, die Abfrageparameter direkt in der Vorlagendatei zu ändern. Jede Methode hat ihre Vor- und Nachteile, und die entsprechende Methode sollte gemäß den spezifischen Bedürfnissen ausgewählt werden.
pre_get_posts ist eine wichtige hakenfunktion in WordPress, mit der wir vor Abfrage die Abfrageparameter ändern können. Durch die Verwendung der Funktion pre_get_posts Hook in der Datei functions.php können wir die Parameter der Hauptabfrage leicht ändern, um den gewünschten Effekt zu erzielen.
Hier ist ein Beispiel:
function my_custom_query($query) {
// Wenn es sich nicht um eine Hintergrundinfrage handelt und es eine Hauptabfrage ist,Ändern Sie die Abfrageparameter
if (!is_admin() && $query->is_main_query()) {
$query->set('cat', '-1,-2,-3'); // ausschließenIDfür1、2、3Einstufung
$query->set('author', '1'); // nur AnzeigenIDfür1Artikel des Autors
}
}
add_action('pre_get_posts', 'my_custom_query');
Im obigen Code ändern wir die Abfrageparameter mit der Funktion $ query-> set (), wodurch die Funktion des Ausschlusses bestimmter Kategorien und der Anzeige nur bestimmter Autor-Artikel erreicht wird.
Wenn wir nur einfache Änderungen an der Abfrage in der Vorlagendatei vornehmen müssen, können wir die Abfrageparameter direkt ändern. Dies ist direkter und einfacher. Zum Beispiel:
// Code in der Homepagesvorlage
$featured_posts = new WP_Query(array(
'category_name' => 'featured', // nur Anzeigen特定分类的文章
'posts_per_page' => 5, // nur Anzeigen5Artikel
));
while ($featured_posts->have_posts()) {
$featured_posts->the_post(); // Artikel Titel zeigen、Inhalt usw.
}
// Stellen Sie die ursprüngliche Abfrage wieder her
wp_reset_postdata();
Im obigen Code befragen wir die ersten 5 Artikel einer bestimmten Kategorie, indem wir die Parameter category_name und post_per_page festlegen. Verwenden Sie gleichzeitig die Funktion WP_RESET_POSTDATA (), um die ursprüngliche Abfrage wiederherzustellen, um zu vermeiden, dass nachfolgende Abfragen beeinflusst werden.
Unabhängig davon, ob Sie den Pre_Get_Posts -Hook verwenden oder die Abfrageparameter direkt ändern, müssen Sie auf die folgenden Punkte achten:
Das Zusammenführen von WP_Query mit Hauptanfragen ist eine sehr praktische Fähigkeit in der WordPress -Entwicklung. Es hilft uns, Abfragen genauer anzupassen und Konflikte zu vermeiden. Unabhängig davon, ob der Pre_Get_Posts -Hook verwendet oder Abfrageparameter direkt geändert werden, muss es vernünftigerweise verwendet werden, um unnötige Nebenwirkungen zu vermeiden.