Bisher haben Sie in dieser Serie gelernt, wie Sie mit WP_Query
benutzerdefinierte Abfragen zur Verwendung in Ihrem Theme oder Plugin erstellen.
In den meisten Fällen werden Sie WP_Query
und einen ganz neuen Satz von Parametern verwenden, die von den Parametern in der Hauptabfrage getrennt sind. Was aber, wenn Sie die Hauptabfrage in die Parameter einschließen möchten?
Beispiele dafür, wo Sie dies tun könnten, sind:
Ich könnte so weitermachen, es gibt unzählige Möglichkeiten, die Hauptabfrage mit Ihrer eigenen benutzerdefinierten Abfrage zu kombinieren.
Ich werde dies anhand von drei Beispielen demonstrieren: Das erste ist ein einfaches mit einer Schleife; das zweite verwendet foreach
, um mehrere Schleifen auszugeben, eine für jeden Beitragstyp; das dritte verwendet zwei separate Abfragen, um beide Beitragstypen für die Kategorie auszugeben Archiv.
Wenn Sie jedoch die Hauptabfrage mit WP_Query
结合起来,您需要以一种易于在 WP_Query
kombinieren möchten, müssen Sie die aktuellen Argumente des Abfrageobjekts so speichern, dass sie in
WP_Query
Tun Sie dies, bevor Sie den Parameter
$mainquery = get_queried_object();
get_queried_object()
Die Funktion gibt das aktuell abgefragte Objekt zurück, unabhängig davon, um welches Objekt es sich handelt. Bei einem einzelnen Beitrag wird nur das Beitragsobjekt zurückgegeben, während bei einem Archiv eine Kategorie, ein Tag, ein Begriffsobjekt oder ein beliebiges Objekt im Zusammenhang mit dem Archiv zurückgegeben wird. Es gibt die ID des Abfrageobjekts zurück.
WP_Query
参数中使用此 $mainquery
Sie können dann diese
$mainquery
-Variable im Beispiel 1: Beiträge nur eines Beitragstyps auf Kategorieseiten anzeigenproduct
.
Ihre Anfrage könnte so aussehen: 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(); ?>
oben verwendet habe, um den Kategorie-Slug auszugeben. product
帖子类型的帖子。您可以在 category.php
aus der Datenbank mit der aktuellen Abfragekategorie abruft. Sie können dies auf der Seitenvorlage category.php
verwenden. pre_get_posts
Beispiel 2: Hauptabfrage kombiniert mit WP_Query und foreach zur Ausgabe mehrerer Schleifen
Das nächste Beispiel gibt alle Beiträge der aktuellen Kategorieseite aus, aber anstatt sie alle in einem Block anzuzeigen, werden sie nach Beitragstyp getrennt.
Das bedeutet, dass Sie CSS verwenden können, um Beitragstypen in Blöcken oder Spalten auf der Seite zu kategorisieren oder sie einfach in verschiedene Listen aufzuteilen.
Hierfür können Sie folgenden Code verwenden: $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(); } ?>
Beispiel 3: Zwei separate Abfragen für zwei Beitragstypen
Das letzte Beispiel ähnelt dem zweiten, teilt den Beitragstyp jedoch in zwei separate Abfragen auf, jede mit ihrer eigenen unterschiedlichen Schleife. Dadurch haben Sie mehr Kontrolle darüber, was in den einzelnen Inhalten angezeigt wird, sodass Sie Ihre Beiträge anders als Ihre Produkte anzeigen können, indem Sie möglicherweise vorgestellte Bilder Ihrer Produkte hinzufügen oder ihnen ein anderes Layout geben. product
und hat Kategorien dafür aktiviert, und Sie schreiben auch einen Blog-Beitrag mit denselben Kategorien. Auf jeder Kategoriearchivseite möchten Sie die zehn neuesten Beiträge anzeigen und anschließend eine Liste aller Produkte in derselben Kategorie anzeigen.
Dazu können Sie Code wie den folgenden verwenden:
<?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(); ?>
ZusammenfassungWP_Query
Das obige Beispiel kann auch mit anderen Archivtypen durchgeführt werden: für Kategorie, Autor, Datum usw. Sehen Sie, ob Ihnen weitere Möglichkeiten einfallen!
Das obige ist der detaillierte Inhalt vonWP_Query mit der Hauptabfrage zusammenführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!