WP_Query mit der Hauptabfrage zusammenführen

PHPz
Freigeben: 2023-08-30 19:58:01
Original
832 Leute haben es durchsucht

WP_Query mit der Hauptabfrage zusammenführen

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:

  • Zeigen Sie auf Kategorie- oder Kategorieseiten nur Beiträge eines Beitragstyps an
  • Zeigen Sie auf Kategorieseiten Beiträge an, die die aktuelle Kategorie und andere Kategorien oder Tags oder Taxonomiebegriffe enthalten
  • Zeigen Sie auf Seiten mit Beitragstypen nur Beiträge mit bestimmten Metadaten an

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.

Definieren Sie Variablen basierend auf der Hauptabfrage

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

einfach zu verwenden sind. Am einfachsten ist es, es einer Variablen zuzuweisen.

WP_QueryTun Sie dies, bevor Sie den Parameter

wie folgt definieren:

$mainquery = get_queried_object();
Nach dem Login kopieren
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 参数中使用此 $mainquerySie können dann diese

$mainquery-Variable im

-Parameter verwenden. Schauen wir uns nun einige Beispiele an.

Beispiel 1: Beiträge nur eines Beitragstyps auf Kategorieseiten anzeigenproduct

Angenommen, Sie haben Ihrer Website einen benutzerdefinierten Beitragstyp hinzugefügt und Kategorien für diesen benutzerdefinierten Beitragstyp aktiviert. Im Kategoriearchiv für jede Kategorie möchten Sie keine Beiträge anzeigen, sondern stattdessen Beiträge eines neuen Beitragstyps – nennen wir ihn

.

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();

?>
Nach dem Login kopieren

Da ich

oben verwendet habe, um den Kategorie-Slug auszugeben. product 帖子类型的帖子。您可以在 category.php

Dadurch erhalten Sie eine Abfrage, die Beiträge des Beitragstyps

aus der Datenbank mit der aktuellen Abfragekategorie abruft. Sie können dies auf der Seitenvorlage category.php verwenden. pre_get_posts

Hinweis: Sie können dieses Ergebnis auch erzielen, indem Sie einen

-Hook verwenden, um die Hauptabfrage zu ändern und ihn mit einer bedingten Funktion zu kombinieren, um das Kategoriearchiv zu überprüfen.

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();

}

?>
Nach dem Login kopieren

Dabei wird die

-Variable verwendet, die wir zuvor verwendet haben, um nacheinander jeden einzelnen Beitragstyp zu speichern.

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

Angenommen, Ihre Website registriert den Beitragstyp

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();

?>
Nach dem Login kopieren

Sie können dann jede Schleife anders schreiben, um für jeden Beitragstyp unterschiedliche Daten auszugeben.

ZusammenfassungWP_Query

Wie Sie im obigen Beispiel sehen können, können Sie mit 🎜 nicht nur eine vollständig benutzerdefinierte Abfrage unabhängig von der Hauptabfrage erstellen, sondern Sie können auch die Objekte der aktuellen Abfrage zusammenführen und eine leistungsfähigere Abfrage auf der Archivseite erstellen. 🎜

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage