Soll ich wp_reset_postdata(); nach endwhile; oder endif; ?

Lesezeit: 3 Minuten

Ich habe einige Zeit damit verbracht, den WordPress-Codex sowie verschiedene Themen durchzulesen, und kann sehen, dass einige Entwickler einfügen <?php wp_reset_postdata(); ?> nach dem endif; in einer Blog-Schleife, während andere den Code dazwischen einfügen endwhile; Und endif; einer Blog-Schleife. Ich habe beide Standorte ausprobiert, aber noch keinen Unterschied feststellen können. Gibt es einen richtigen Standort?

Shibis Benutzeravatar
Schibi

Diese Funktion soll die sekundäre Abfrage zurücksetzen, die Sie ausführen. Die Funktion the_postlässt Sie alle Funktionen verwenden, die Sie in der Schleife wie ausführen können the_title() the_content usw..

Also setzt du die zurück the_post Funktion und nach der endwhile; zurücksetzen kannst du es schon. und verwenden Sie Ihre Hauptabfrage in der if Aussage auch, wenn Sie möchten.

<?php
// this is the main query check if there is posts
if ( have_posts() ) : 
    // loop the main query post and run the_post() function on each post that you can use the function the_title() and so on..
    while ( have_posts() ) : the_post(); 
        the_title(); // title of the main query

        // the is second query
        $args = array( 'posts_per_page' => 3 );
        $the_query = new WP_Query( $args );
        // check if there is a posts in the second query
        if ( $the_query->have_posts() ) :
            // run the_post on the second query now you can use the functions..
            while ( $the_query->have_posts() ) : $the_query->the_post();
                the_title();
                the_excerpt();
            endwhile;

            // reset the second query
            wp_reset_postdata();

            /* here we can use the main query function already if we want..
            its in case that you want to do something only if the second query have posts.
            You can run here third query too and so on...
            */

            the_title(); // title of the main query for example

        endif;

    endwhile;
endif;
?>

  • Danke Shibi für deine Antwort. Habe ich das richtig verstanden have_posts ist die primäre Abfrage und the_post ist die sekundäre Abfrage? In diesem Sinne habe ich es richtig verstanden, dass durch Einfügen <?php wp_reset_postdata(); ?> nach dem endwhile; (genau wie in Ihrem Beispiel) würde ich verhindern <?php the_title(); ?> Und <?php the_excerpt(); ?> Soll ich eine in meine nächste Blog-Schleife einfügen?

    – Craig

    3. Februar 2017 um 14:38 Uhr

  • Ich habe den Code mit einigen Kommentaren bearbeitet, um zu versuchen, Ihnen zu helfen, ihn besser zu verstehen.

    – Schibi

    3. Februar 2017 um 14:55 Uhr

  • Danke Schibi. Nicht ganz 100% sicher, aber hat mich auf jeden Fall in die richtige Richtung gelenkt. Ich werde Ihre obigen Kommentare verwenden, um mir bei meiner Codierung zu helfen, und hoffentlich wird dies mein Verständnis vervollständigen.

    – Craig

    3. Februar 2017 um 15:10 Uhr

wp_reset_postdata() ist nur erforderlich, wenn Sie eine sekundäre Schleife haben (Sie führen zusätzliche Abfragen auf einer Seite aus). Der Zweck der Funktion besteht darin, die globale Post-Variable wieder auf den aktuellen Post in der Hauptabfrage zurückzusetzen.

Beispiel:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    OUTPUT MAIN POSTS HERE

<?php endwhile; endif; ?>

Im obigen Code verwende ich einfach die Hauptschleife, um Beiträge anzuzeigen. Es gibt keinen Grund, es aufzunehmen wp_reset_postdata(). Die globale Post-Variable ist genau das, was sie sein soll.

Wenn ich mich irgendwo anders auf der Seite entscheide, eine Sekundärschleife hinzuzufügen, dann brauche ich wp_reset_postdata().

// This query is just an example. It works but isn't particularly useful.
$secondary_query = new WP_Query( array(
    'post_type' => 'page'
) );

if ( $secondary_query->have_posts() ) :

    // Separating if and while to make answer clearer.
    while ( $secondary_query->have_posts() ) : $secondary_query->the_post();

        // OUTPUT MORE STUFF HERE.

    endwhile;

    wp_reset_postdata();

endif;

Um Ihre ursprüngliche Frage zu beantworten: Es kommt normalerweise danach endwhile und davor endif. Es ist der Aufruf an the_post() was tatsächlich die globale post-Variable ändert. Wenn es keine Posts gibt, bleibt die Post-Variable gleich und es gibt keinen Grund, die Reset-Funktion zu verwenden.

  • Danke, Nathan Dawson. Sehr geschätzt.

    – Craig

    4. Februar 2017 um 13:31 Uhr


1442520cookie-checkSoll ich wp_reset_postdata(); nach endwhile; oder endif; ?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy