Warum $query->is_main_query() false zurückgibt (wordpress)

Lesezeit: 2 Minuten

Ich habe eine sehr einfache index.php-Datei in meinem WordPress myTheme-Ordner, in der ich nur die Beiträge mit der Kategorie „Freunde“ mit dem Hook „pre_get_posts“ anzeigen möchte. Aber $query->is_main_query() in der if-Bedingung gibt false zurück. Deshalb funktioniert es nicht, es zeigt alle Beiträge an. Hier ist der Code in meiner index.html-Datei:

<?php
function myCategory( $query ) {
	if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
		$query->set( 'category_name', 'friends' );
	}
}
add_action( 'pre_get_posts', 'myCategory' );


$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$wp_query = new WP_Query( 'posts_per_page=2&paged='.$paged );
if ($wp_query->have_posts()) {
 	while ( $wp_query->have_posts() ) {
		$wp_query->the_post();
		echo "<h2><a href="".get_the_permalink()."">".get_the_title()."</a></h2>";
		the_content("read more..",false);
	}
} 
previous_posts_link("<< Previous");
next_posts_link("More >>");

?>

Aber wenn ich den folgenden Code verwende und nur $query->is_main_query() aus der if-Bedingung in der myCategory()-Funktion entferne, funktioniert es.

<?php
function myCategory( $query ) {
	if ( $query->is_home() && ! is_admin() ) {
		$query->set( 'category_name', 'friends' );
	}
}
add_action( 'pre_get_posts', 'myCategory' );


$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$wp_query = new WP_Query( 'posts_per_page=2&paged='.$paged );
if ($wp_query->have_posts()) {
 	while ( $wp_query->have_posts() ) {
		$wp_query->the_post();
		echo "<h2><a href="".get_the_permalink()."">".get_the_title()."</a></h2>";
		the_content("read more..",false);
	}
} 
previous_posts_link("<< Previous");
next_posts_link("More >>");

?>

Jetzt möchte ich wissen, warum $query->is_main_query() falsch zurückgibt. Könnte jemand bitte erklären?

Aus Ihren Beispielen sehe ich, dass Sie auf der ersten überprüfen, ob es sich um eine Suchseite handelt, und auf der zweiten, auf der Sie überprüfen, ob die Seite die Startseite ist. Ich würde also sagen, dass das Problem nicht der is_main_query()-Check ist, sondern der is_search()-Check, wahrscheinlich überprüfen Sie die Änderungen auf der Homepage und deshalb funktioniert es nicht.

1187330cookie-checkWarum $query->is_main_query() false zurückgibt (wordpress)

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

Privacy policy