it-swarm.com.de

Best Practice Custom Function, wo werden die Variablen wiedergegeben?

Ich habe eine benutzerdefinierte Funktion, um einige Beiträge abzufragen. Ich habe mich gefragt, ob es in Ordnung ist, Variablen innerhalb der Schleife der Funktion auszugeben, da ich normalerweise eine Variable am Ende der Funktion ausgeben würde. Wenn ja, wie können mehrere Werte in dieser Variablen ordnungsgemäß gespeichert werden?

Siehe folgenden Beispielcode:

<?php 
function get_some_posts($args) { 
        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();
                //Can i echo variables here?
                get_template_part( 'parts/content-item', get_post_type() );

                //Or should i put it into a variable and if so how? Since the below is not working.
                $to_echo = get_template_part( 'parts/content-item', get_post_type() );
            }

        }
        //And then echo it at the end of the function?
        echo $to_echo;
}
add_action('custom_hook','get_some_posts');
2
RobbTe

Generell ja. Wenn Ihre normale Ausgabe das Echo am Ende wäre, würde sich das Echo während der Schleife nicht wesentlich ändern.

function get_some_posts($args) { 
        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();
                the_title(); // the_title() is the same as echo get_the_title();
            }

        }
}
add_action('custom_hook','get_some_posts');

Die Ausgabe von oben sollte mit der Ausgabe von unten übereinstimmen:

function get_some_posts($args) { 
        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            // declare your variable to avoid php output errors
            $to_echo = '';

            while ( $query->have_posts() ) {

                $query->the_post();

                $to_echo .= get_the_title(); // ".=" adds to the current value of the variable.
            }

        }
        //And then echo it at the end of the function?
        echo $to_echo;
}
add_action('custom_hook','get_some_posts');

Natürlich arbeite ich direkt nach dem Code Ihrer Frage. Diesem fehlt ein wenig Kontext und Sie möchten auch eine Art Leerzeichen oder Zeilenumbruch zwischen den Titeln einfügen.

Als praktisches Beispiel und Ihre Frage zum nicht Wiedergeben in The Loop sehen Sie hier eine Möglichkeit, um nur ein Beispiel zu nennen:

add_filter( 'the_content', 'get_some_posts' );
function get_some_posts( $content ) { 

    if ( is_single() ) {

        $query = new WP_Query( array( 'post_type' => 'page' ) );

        if ( $query->have_posts() ) {

            // declare your variable to avoid php output errors
            $to_echo = '';

            while ( $query->have_posts() ) {

                $query->the_post();

                $to_echo .= get_the_title() . "<br />";
            }

        }

        $content = $content . "<p>Checkout some pages:</p>" . $to_echo;
    }

    return $content;
}

Dies würde Ihre "theoretischen" nehmen und sie auf den "the_content" -Filter von WP anwenden, der den Hauptinhaltsbereich filtert. Zuerst wird geprüft, ob wir uns in einem einzelnen Beitrag befinden, und in diesem Fall wird eine Abfrage ausgeführt, um Seiten abzurufen. Es fügt die Titel dieser Seiten in eine Liste ein, fügt Text hinzu und greift dann auf die Variable $ content (die den Filter durchläuft) zu, bevor das Ergebnis zurückgesendet wird.

In Bezug auf die endgültige Verwendung ist es kein Beispiel aus der "realen Welt", da ich eigentlich keine Links eingefügt habe - nur die Titel, und die Anzahl ist nicht begrenzt, so dass es eine lächerliche Menge an zusätzlichen Inhalten sein kann. Dies ist nur ein Beispiel für Ihre Frage, wie Sie ein Ergebnis aus WP_Query abrufen und zurückgeben können. Es ist also ein Beispiel dafür, was "Filter" tun (oder tun könnten). Wenn es eine Aktion wäre, dann wäre das anders. Sie müssten es entweder in der Funktion OR in eine als global deklarierte Variable einfügen und diese global in einer späteren Aktion/einem späteren Filter auswählen.

1
butlerblog