WordPress - pre_get_posts anstelle von query_posts auf Seiten
Meine Situation ist etwas komplex, ich werde versuchen, sie so kurz wie möglich zu erklären.
Ich benutze geradequery_posts
die Hauptabfrage auf benutzerdefinierten Seiten meiner Site zu ändern, was meines Erachtens recht gut funktioniert, obwohl ich gelesen habe, dass die Verwendung von query_posts aus verschiedenen Gründen eine schlechte Praxis ist.
Also, warum benutze ichquery_posts
und nicht erstellen einWP_Query
Objekt, das Sie fragen können?
Es liegt daran, dass ich das Infinite-Scroll-Plugin verwende. Infinite-Scroll funktioniert nicht gut mit WP_query, aber es funktioniert einwandfrei, wenn Sie einfach die Hauptabfrage mit query_posts ändern. Zum Beispiel funktioniert die Paginierung nicht mit unendlicher Schriftrolle + WP_query (Hauptanliegen).
Auf einer Seite ändere ich die Abfrage, um die am häufigsten angezeigten Beiträge zu erhalten.
<?php $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; ?>
<?php query_posts( array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) ); ?>
<?php if (have_posts()) : ?>
<?php while ( have_posts() ) : the_post() ?>
<?php if ( has_post_format( 'video' )) {
get_template_part( 'video-post' );
}elseif ( has_post_format( 'image' )) {
get_template_part( 'image-post' );
} else {
get_template_part( 'standard-post' );
}
?>
<?php endwhile;?>
<?php endif; ?>
Nach langem Lesen stelle ich fest, dass meine andere Option zum Ändern der Hauptabfrage verwendet wirdpre_get_posts
Ich bin mir allerdings nicht ganz sicher, wie ich vorgehen soll.
Nehmen wir zum Beispiel:
function textdomain_exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-1,-2' );
}
}
add_action( 'pre_get_posts', 'textdomain_exclude_category' );
Okay, so einfach - wenn es die Startseite ist, ändern Sie die Hauptabfrage und schließen Sie zwei Kategorien aus.
Was ich verwirrt bin und nicht herausfinden kann, ist:
das Anwendungsszenario für benutzerdefinierte Seitenvorlagen. Mit meinemquery_posts
Änderung Ich kann nur in das Array vor fallenif (have_posts())
, meine Seitenvorlage auswählen, veröffentlichen und los geht's. Mitpre_get_posts
Ich kann nicht herausfinden, wie ich es zum Beispiel sagen soll$query->most-viewed
usw
array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) );
Wie zum Teufel mache ich das mitpre_get_posts
und stellen Sie sicher, dass es paginiert ist, dh. arbeitet mit unendlicher Schriftrolle? In allen Beispielen, mit denen ich gesehen habepre_get_posts
Es gibt keine Arrays.