Heim  >  Artikel  >  Backend-Entwicklung  >  WP_Query meistern: Die Kraft der Schleife nutzen

WP_Query meistern: Die Kraft der Schleife nutzen

PHPz
PHPzOriginal
2023-09-01 10:49:091222Durchsuche

标题重写为:Mastering WP_Query: Harnessing the Power of the Loop

Wie ich in der Einleitung zu dieser Serie dargelegt habe, bestehen WP_Query-Kurse aus vier Hauptelementen:

  • Abfrageparameter: Verwenden Sie die Parameter, die in dieser Serie ausführlich vorgestellt werden
  • Die Abfrage selbst
  • Schleife, es wird der Beitragsinhalt, der Titel oder was auch immer Sie anzeigen möchten ausgegeben
  • Ende: If- und While-Tags schließen und Beitragsdaten zurücksetzen

In diesem Tutorial zeige ich Ihnen, wie Sie Schleifen mit WP_Query verwenden, einschließlich der beiden Hauptmethoden zum Erstellen von Schleifen und der Verwendung mehrerer Schleifen.

Fahren Sie die entsprechende Position ein

Ohne die Schleife wird auf der Seite nichts angezeigt. Nachdem WordPress die Abfrage mit den von Ihnen definierten Parametern ausgeführt hat, müssen Sie ihm mitteilen, was aus den erhaltenen Daten ausgegeben werden soll. Hier kommt die Schleife ins Spiel.

Die Schleife kommt also nach der Abfrage, die drei Labels verwendet:

  • if( $query->have_posts() ) 检查是否有任何帖子。它通过检查查询的 post_count 属性的值是否小于 current_post + 1 Wert, dies zu erreichen.
  • while( $query->have_posts() ) 只要有要检索的帖子, 就会对每个帖子重复循环。正如你所看到的,这个 have_posts() Die Methode ist die gleiche wie die, die wir zuvor aufgerufen haben, um zu prüfen, ob ein Beitrag vorhanden ist. Beachten Sie, dass diese Methode den Beitragszähler nicht erhöht. Dadurch erfahren wir lediglich, ob sich Beiträge in der Schleife befinden oder ob wir uns am Ende der Schleife befinden. Außerdem wird die Schleife automatisch zurückgespult, sobald sie das Ende erreicht hat.
  • $query->the_post() Besuchen Sie diesen speziellen Beitrag. Es führt auch einige andere Vorgänge aus, z. B. das Abrufen des nächsten Beitrags und das Erhöhen des Beitragszählers. Außerdem werden globale Veröffentlichungsdaten für unsere Nutzung eingerichtet.

Wenn Sie have_posts() 方法。这是因为 have_posts() aufrufen, wenn Sie sich in einer Schleife befinden, sollten Sie die Schleife nicht an den Anfang zurückspulen, da Sie sonst in einer Endlosschleife stecken bleiben.

Hier befindet sich nun die Schleife in der WP_Query-Klasse:

<?php

$args = array(
    // Arguments for your query.
);

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

?>

Nachdem die Schleife ausgeführt wurde, müssen Sie sie nur noch mit wp_reset_postdata() aufräumen.

Schleifenstruktur

Die Art und Weise, wie die Schleife aufgebaut ist, hängt von den Daten ab, die Sie aus dem Beitrag anzeigen möchten. Unten sehen Sie eine Beispielschleife, die den Titel des Beitrags, das vorgestellte Bild und den Auszug ausgibt. Sie können eine Schleife wie diese auf Archivseiten verwenden.

<?php

$args = array(
    // Arguments for your query.
);

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

        ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class( 'left' ); ?>>
            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                <?php post_thumbnail( 'thumbnail' );?>
            </a>
            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                <?php the_title(); ?>
            </a>
            <?php the_excerpt(); ?>
        </article>

        <?php

    }

}

// Restore original post data.
wp_reset_postdata();

?>

Diese Schleife zeigt genau das, was ich oben beschrieben habe: Ausgewähltes Bild, Titel und Auszug.

Weitere Schleife: Inhalt prüfen

Aber manchmal möchten Sie vielleicht einen Titel vor der Liste der Beiträge hinzufügen oder sie alle in ein enthaltendes Element aufnehmen. Wenn Sie dies einfach vor der Schleife hinzufügen, erfolgt die Ausgabe unabhängig davon, ob die Abfrage tatsächlich Daten zurückgibt, was bedeutet, dass Sie möglicherweise einen Header haben, unter dem sich nichts befindet, oder unnötiges Markup.

Dieses Problem kann leicht gelöst werden, indem das umschließende Element oder der Titel in ein if-Tag eingefügt wird:

<?php

$args = array(
    // Arguments for your query.
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    
    echo '<section class="clear">';
        echo '<h2>' . __( 'Heading', 'tutsplus' ) . '</h2>';
    
        // Start looping over the query results.
        while ( $query->have_posts() ) {
    
            $query->the_post();
    
            ?>
    
            <article id="post-<?php the_ID(); ?>" <?php post_class( 'left' ); ?>>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    <?php post_thumbnail( 'thumbnail' );?>
                </a>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    <?php the_title(); ?>
                </a>
                <?php the_excerpt(); ?>
            </article>
    
            <?php
    
        }
    
    echo '</section>';

}

// Restore original post data.
wp_reset_postdata();

?>

Hier sehen Sie, dass ich überprüft habe, ob meine Abfrage Beiträge abgerufen hat. Wenn ja, habe ich ein enthaltendes Element geöffnet und einen Titel hinzugefügt.

Dies ist auch nützlich, wenn Sie Abfrageergebnisse als Liste ausgeben möchten. Nehmen wir an, ich möchte eine Liste aller Beiträge in einer bestimmten Kategorie erstellen. Das ul-Element befindet sich nicht in meiner Schleife, da es sich nicht auf einen bestimmten Beitrag bezieht, ich möchte es aber nur ausgeben, wenn es einen Beitrag gibt. Also verwende ich Folgendes:

<?php

$args = array(
    'category_name' => 'category-slug',
    'post_type' => 'post'
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    echo '<ul class="category posts">';

        // Start looping over the query results.
        while ( $query->have_posts() ) {

            $query->the_post();

            ?>

            <li <?php post_class( 'left' ); ?>>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    <?php the_title(); ?>
                </a>
            </li>

            <?php
    
        }

    echo '</ul>';

}

// Restore original post data.
wp_reset_postdata();

?>

Dadurch wird überprüft, ob die Abfrage Beiträge abgerufen hat. Wenn ja, wird das ul-Element geöffnet und dann die Schleife ausgeführt.

Führen Sie zusätzliche Schleifen aus

Es ist wichtig zu beachten, dass Sie mit WP_Query 运行多个循环,但您必须重置发布数据并启动 WP_Query zwar mehrere Schleifen ausführen können, Sie dazu jedoch die Post-Daten zurücksetzen und eine zweite Instanz von

starten müssen. Dies liegt daran, dass jede Schleife Daten basierend auf unterschiedlichen Parametern ausgibt.

Dieses Beispiel zeigt einen Auszug und ein ausgewähltes Bild aus dem ersten Artikel, dann nur den Titel jedes nachfolgenden Artikels:

<?php

// First query arguments.
$args1 = array(
    'post_type' => 'post',
    'posts_per_page' => '1'
);

// First custom query.
$query1 = new WP_Query( $args1 );

// Check that we have query results.
if ( $query1->have_posts() ) {

    // Start looping over the query results.
    while ( $query1->have_posts() ) {

        $query1->the_post();

        ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                <?php post_thumbnail( 'thumbnail' );?>
            </a>
            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                <?php the_title(); ?>
            </a>
            <?php the_excerpt(); ?>
        </article>

        <?php

    }

}

// Restore original post data.
wp_reset_postdata();

// Second query arguments.
$args2 = array(
    'offset' => '1',
    'post_type' => 'post'
);

// Second custom query.
$query2 = new WP_Query( $args2 );

// Check that we have query results.
if ( $query2->have_posts() ) {

    echo '<ul class="more-posts">';
    
        // Start looping over the query results.
        while ( $query2->have_posts() ) {

            $query2->the_post();
    
            ?>

            <li <?php post_class(); ?>>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    <?php the_title(); ?>
                </a>
            </li>
    
            <?php
    
        }
    
    echo '</ul>';

}

// Restore original post data.
wp_reset_postdata();

?>

Ich habe hier zwei Schlüsselparameter verwendet:
  • 'posts_per_page' => '1'
  • wird bei der ersten Abfrage verwendet und gibt nur die neuesten Beiträge aus.
  • 'offset' = '1'
  • wird mit der zweiten Abfrage verwendet und überspringt den ersten Beitrag, um sicherzustellen, dass er in der Liste unten nicht wiederholt wird.

ul 元素,并将每个帖子标题包含在 liWie Sie dem obigen Code entnehmen können, unterscheidet sich die Schleife bei jeder Abfrage geringfügig. Der erste gibt das vorgestellte Bild, den Titel und den Auszug aus, während der zweite prüft, ob die Abfrage Beiträge enthält. Wenn ja, öffnet er das

-Element und verpackt jeden Beitragstitel in li Links auf Elemente und deren Seiten. 🎜

Sie werden auch feststellen, dass ich wp_reset_postdata() nach beiden Schleifen verwendet habe. Wenn ich dies nicht getan hätte, würde mir die Verwendung des Template-Tags außerhalb der sekundären Schleife Daten über den letzten Beitrag innerhalb der Schleife liefern. Durch den Aufruf dieser Funktion werden die Veröffentlichungsdaten auf die Hauptabfrage zurückgesetzt.

Zugriff auf Beitragsinformationen innerhalb der Schleife

Es gibt viele Funktionen, die Sie innerhalb einer Schleife aufrufen können, um auf Informationen zum aktuellen Beitrag zuzugreifen. Einige davon haben Sie auch in diesem Tutorial gesehen. In diesem Abschnitt gebe ich Ihnen eine Liste einiger allgemeiner Funktionen, die Sie möglicherweise gelegentlich verwenden.

Hol dir den Titel

Sie können drei Funktionen verwenden, um den Titel eines Beitrags abzurufen. Sie sind the_title()get_the_title()the_title_attribute()get_the_title() 函数只是检索帖子标题,而 the_title() 将根据传递的参数显示或检索标题以及可选标记。当您想在显示标题之前对其进行清理时,您应该使用 the_title_attribute() .

Holen Sie sich Auszüge oder vollständige Inhalte

Es gibt eine spezielle Funktion namens the_excerpt(), um einen Auszug des aktuellen Beitrags anzuzeigen. Es wendet mehrere Filter auf den bereitgestellten Auszug an, damit er dem Publikum korrekt angezeigt werden kann. Nicht für jeden Artikel wird vom Autor ein Auszug bereitgestellt. In diesem Fall wird vor der Anzeige eine komprimierte Version des vollständigen Beitragsauszugs generiert.

Mit der Funktion the_content() können Sie sich den kompletten Inhalt des Beitrags anzeigen lassen.

Erhalten Sie Beitragskategorien, Tags und andere Metadaten

Ihre WordPress-Beiträge verfügen normalerweise über einige Tags oder Kategorien, die Sie zuweisen. Sie können mit the_tags()the_category() 函数在循环中显示这些标签和类别的列表。使用 the_author() 函数显示帖子的作者。帖子的 ID 也可以通过函数 the_ID() darauf zugreifen.

Erhalten Sie Datum und Uhrzeit der Veröffentlichung oder Änderung

Es gibt spezielle Funktionen in WordPress, die Sie in einer Schleife verwenden können, um das Veröffentlichungsdatum eines Beitrags anzuzeigen (the_date()) 和时间 (the_time())。您应该记住的两个重要点是 the_time() 也可以用于仅显示帖子的发布日期。此外,对于同一天发布的多个帖子, the_date() 的输出仅回显一次。这基本上意味着您几乎总是希望使用 the_time()) für mehr Flexibilität und Benutzerfreundlichkeit

Zusammenfassung

Ohne die Schleife macht WP_Query nicht wirklich viel. Diese Schleife ist der Code, den Sie verwenden, um die Daten anzuzeigen, die WordPress basierend auf Ihren Abfrageparametern aus der Datenbank abruft.

Wie ich gezeigt habe, gibt es einige Änderungen an der Schleife. Eine einfache Schleife gibt alle Beiträge in der Reihenfolge aus, die Sie in den Abfrageparametern angeben (oder standardmäßig in absteigender Datumsreihenfolge). Wenn Sie if( $query->have_posts() ) und while( $query->have_posts() ) trennen, haben Sie es Es ist möglich, zusätzliches Markup außerhalb der Schleife einzufügen, jedoch nur, wenn Ihre Abfrage Daten zurückgegeben hat. Schließlich können Sie if( $query->have_posts() )while( $query->have_posts() ) 分开,您可以在循环外部插入额外的标记,但前提是您的查询已返回数据。最后,通过指定替代参数并在每次循环后使用 wp_reset_postdata(),您可以多次使用 WP_Query mehrmals verwenden, um mehrere Schleifen auf der Seite zu erstellen, indem Sie alternative Parameter angeben und

nach jeder Schleife verwenden.

Dieser Beitrag wurde mit einem Beitrag von Nitish Kumar aktualisiert. Nitish ist ein Webentwickler mit Erfahrung in der Erstellung von E-Commerce-Websites auf verschiedenen Plattformen. Seine Freizeit verbringt er mit der Arbeit an persönlichen Projekten, die ihm den Alltag erleichtern, oder mit Abendspaziergängen mit Freunden.

🎜

Das obige ist der detaillierte Inhalt vonWP_Query meistern: Die Kraft der Schleife nutzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Aufgabenplanung in LaravelNächster Artikel:Aufgabenplanung in Laravel