Mögliches Duplizieren:
Woher wissen, welches die Hauptfrage ist?
Ich bin gespannt, was die sogenannte "Hauptabfrage" ist.
Was ich habe, sind zwei Fragen auf der Titelseite.
if (have_posts()) : while (have_posts()) : the_post();
// do the main loop
endwhile; endif;
$posts = new WP_Query(array('post_type' => 'some_other_post_type'));
while ($posts->have_posts()) : $posts->the_post();
// do the secondary loop
// but still operating with the some_post_type
endwhile; wp_reset_postdata();
Ich möchte lediglich die Hauptabfrage aus Effizienzgründen in meinen benutzerdefinierten Beitragstyp ändern.
add_action( 'pre_get_posts', 'some_name');
function some_name($query) {
if (is_front_page() && is_main_query()) {
$query->set( 'post_type', 'some_post_type' );
return;
}
}
Was ich dachte, ist, dass diese Bedingung in diesem Hook nur für die erste Schleife wahr ist, aber es scheint, dass jeder new WP_Query
durch sie geht.
Können Sie mir bitte erklären, was "Hauptfrage" ist und was nicht?
PS: Ich habe fast eine ähnliche Frage mit der Lösung gefunden, die Abfragen in pre_get_post
hook nach benutzerdefinierten Abfragevarianten zu variieren.
Ihr Filter enthält einen Fehler: Wenn Sie is_main_query aufrufen, prüfen Sie nicht, ob die übergebene Abfrage die Hauptabfrage ist, sondern, ob die derzeit aktive Abfrage die Hauptabfrage ist. Dies ist immer der Fall.
Also versuchen Sie stattdessen Folgendes:
add_action( 'pre_get_posts', 'some_name');
function some_name($query) {
if ($query->is_front_page() && $query->is_main_query()) {
$query->set( 'post_type', 'some_post_type' );
return;
}
}
Die Hauptabfrage wird automatisch ausgelöst, wenn WordPress festgelegt hat, was für die Anforderungs-URI angezeigt werden soll.
Spätere Instanzen von WP_Query
sind nie die Hauptabfrage, aber Sie können sie verwenden, um das Ergebnis der Hauptabfrage in $GLOBALS['wp_the_query']
zu ersetzen. Tu das nicht.