Query & the_content () wird in der Kopfzeile angezeigt

In diesem Beitrag geht es um zwei Dinge:

  1. Alle Ergebnisse dieser Abfrage werden in die Kopfzeile der Seite geschrieben, nicht in den Inhaltsbereich, wie sie sollten. Kennen Sie eine Lösung dafür, warum dies geschieht, und den einfachsten Lösungsansatz?

  2. Können Sie bitte meine Anfrage kritisieren? Ich möchte wissen, dass alles falsch ist (aber es funktioniert und produziert die Echoergebnisse wie erwartet)

    add_action( 'pre_get_posts', 'cv_testimonials_list'); function cv_testimonials_list($query) { if ($query->is_page('9595') && $query->is_main_query()) { gravity_form(1, false, false, false, '', false); $args = array ( 'post_type' => 'testimonial', 'post_status' => 'published', 'pagination' => true, 'posts_per_page' => '10', 'order' => 'DESC', 'orderby' => 'date',); // The Query $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); echo "

    " . the_content() . "

    "; echo "

    " . the_title() . "

    "; echo "

    " . get_post_meta( get_the_ID(), 'testimonials-website-url', true ) . "

    "; // print "
    "; // print_r($custom_fields); // print "

    "; endwhile; return; } }

Solutions Collecting From Web of "Query & the_content () wird in der Kopfzeile angezeigt"

Die Hauptabfrage wird ausgeführt, bevor die Vorlage geladen wird. WordPress weiß, welche Vorlage basierend auf den Ergebnissen dieser Abfrage geladen werden soll.

Wenn Sie eine zusätzliche Abfrage in den Inhaltsbereich einfügen möchten, erstellen Sie entweder einen Shortcode , oder fügen Sie einen Filter für den Inhalt hinzu, und führen Sie dort die Überprüfung / Abfrage Ihrer Seite durch.

Wie Milo bemerkte, sollten Sie nur die Abfrage bearbeiten. Ihr Problem besteht darin, dass Sie es dann ausführen und verarbeiten, während der pre_get_posts-Filter verarbeitet wird.

Als Filter sollte pre_get_posts zum Ändern der Abfrage verwendet werden. Es wird dann ausgeführt und dann wird Ihre Seite angezeigt.

Damit:

 function cv_testimonials_list($query) { if ($query->is_page('9595') && $query->is_main_query()) { gravity_form(1, false, false, false, '', false); $query->set('post_type', 'testimonial'); $query->set('order', 'DESC'); $query->set('orderby', 'date'); } } 

Das sollte die Abfrage wie gewünscht bearbeiten … und Ihre Vorlage sollte die richtigen Beiträge anzeigen.

Möglicherweise müssen Sie Ihre Vorlage bearbeiten, um die in Ihrer while-Schleife angezeigte Logik zu verwenden. Dieser Teil gehört jedoch nicht zum Filter, da der Filter vor der Anzeige der Seite ausgeführt wird. Daher wird er oben auf der Seite angezeigt .

pre_get_posts () ist kein normaler Filter.

Es handelt sich um einen Aktionsfilter, der ausgeführt wird, nachdem alle Argumente an eine einzelne Abfrage Ihres WordPress übergeben wurden und bevor die Abfragen für die database ausgeführt werden. Alles du kann sollte innerhalb von pre_get_posts() ändern Abfrageparameter, wenn WP-Bedingungen erfüllt sind (nicht alle Bedingungen verfügbar sind, nur die, die WP bekannt sind, bevor die Abfrage ausgeführt wird – lesen Sie die Dokumentation für weitere Details).

Deshalb sollten Sie keine weitere Abfrage innerhalb von pre_get_posts() ich bin überrascht, dass Sie dort keine Endlosschleife erhalten), da Ihre Abfrage pre_get_posts ()) erneut auslösen sollte, noch sollten Sie etwas drucken, echo oder zurückgeben .

Ändern Sie $ query, wenn die Bedingungen erfüllt sind.

Dies sollte beide Fragen beantworten.