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_postsIch 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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage