Ich kann eine Abfrage nicht richtig zurücksetzen

Ich habe eine benutzerdefinierte Taxonomie-Archivseite mit dem Namen ‘taxonomy-teacher.php’, wo ich Lehrer-Meta (Titel und Beschreibung) zeige und dann alle Vorträge des Lehrers (Audiodateien) mit dem benutzerdefinierten Beitragstyp ‘Audiotalk’ durchläuft. “Lehrer” ist eine nicht-hierarchische Taxonomie für “Audiotalk”. Alles funktioniert super.

audiotalks haben auch eine heirachische benutzerdefinierte Taxonomie namens “audiotalk-categories”, so dass die Leute sie irgendwo auf der Website suchen können. Aber auf dieser Seite brauche ich diese Kategorien nicht.

Hier ist das Problem: Ich füge eine Datei am Ende dieser Vorlage ein, die “verwandte Bücher” anzeigt. In diesem Include gibt es eine eigene Schleife, die zuerst die Taxonomie abfragt, um zu bestimmen, was angezeigt werden soll. Ich möchte, dass es Bücher zu dieser “Lehrer” -Taxonomie zeigt, aber es zeigt tatsächlich Bücher, die mit den “Audiotalk-Kategorien” zu tun haben. Also habe ich versucht, diese Audiotalk-Schleife mit jeder Methode, die ich online finden kann, zurückzusetzen, und nichts funktioniert.

Hier ist mein Code (es hat einen meiner Versuche):

Teacher :

's Bodhi Talks:

<a href="https://wordpress.stackexchange.com/questions/266415/am-unable-to-reset-a-query-properly/" class="list-link">

<a href="https://wordpress.stackexchange.com/questions/266415/am-unable-to-reset-a-query-properly/" class="listen-link">Listen Now »

Ich habe auch versucht, wp_reset_postdata () und ich habe versucht, sowohl wp_reset_postdata () und wp_reset_query () an verschiedenen Stellen in den ifs und while.

Hier ist der Code für Template-related-products.php. Es funktioniert perfekt überall wo es enthalten ist, aber mir ist klar, dass der Fehler auch hier sein könnte:

 ID, $top_taxonomy, array( 'fields' => 'all' ) ); foreach ($terms_list as $term) : $term_id = $term->term_id; $taxonomy = $term->taxonomy; $tax_query[] = array ( 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $term_id, ); endforeach; $tax_query['relation'] = 'OR'; if ( is_post_type_archive( 'teacher' ) ) : $args = array( 'post_type' => 'related_product', 'posts_per_page' => 3, 'orderby' => 'rand', 'meta_query' => array( array( 'key' => 'related_product_type', 'compare' => '==', 'value' => 'book' ), array( 'key' => 'associated_audio_talk_teacher', 'compare' => 'LIKE', 'value' => $term_id ) ) ); else : $args = array ( 'post_type' => 'related_product', 'posts_per_page' => 3, 'orderby' => 'rand', 'order' => 'ASC', 'meta_query' => array ( array ( 'key' => 'related_product_type', 'compare' => '=', 'value' => 'book' ) ), 'tax_query' => $tax_query, ); endif; $rp_query = new WP_Query( $args ); ?> have_posts() ): ?> 

Suggested Reading

Wenn ich $ top_taxonomy widerspreche, sagt es immer “audiotalk-category” und wenn ich print_r ($ terms_list), zeigt es die Taxonomie für dieses Audio-Gespräch, nicht die ursprüngliche Taxonomie für die Vorlage. Jede Hilfe wäre willkommen.

Solutions Collecting From Web of "Ich kann eine Abfrage nicht richtig zurücksetzen"

wp_reset_query dient zur Bereinigung nach einem Aufruf von query_posts , Sie müssen es nicht nach einer Standard-Posts-Schleife aufrufen, nur wenn Sie query_posts . Da Sie query_posts niemals zum Abrufen von Posts aus der database verwenden sollten, sollten Sie diese function niemals verwenden.

Aber wie säubere ich nach der Hauptschleife?

Das ist kein Beispiel für eine vollständige Hauptpostschleife:

 if ( have_posts() ) { while ( have_posts() ) { the_post(); // display content } } else { // none found } 

Was ist mit WP_Query oder get_posts ?

Es gibt eine ähnliche und nützlichere function namens wp_reset_postdata . Diese function bereinigt nach diesen functionen:

  • WP_Query::the_post
  • setup_postdata

Ein Beispiel für eine WP_Query Post-Schleife sollte also so aussehen:

 $q = new WP_Query( [ ... ] ); if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); // display content } wp_reset_postdata(); } else { // none found } 

Beachten Sie, dass ich wp_reset_postdata nach der while Schleife aufgerufen wp_reset_postdata , aber innerhalb der if statement, nicht danach. Setzen Sie postdata nur zurück, wenn etwas zu bereinigen ist

Und wenn ich die Schleife außer Kraft setzen muss?

Verwenden Sie den pre_get_posts Filter, um die Hauptschleife zu ändern, erstellen Sie keine neue Ersatzabfrage.

Was ist mit get_posts ?

Wenn Sie die Postdaten nie festlegen, müssen Sie sie nie zurücksetzen.