it-swarm.com.de

Anzahl der Seiten - mehrere (benutzerdefinierte) Beitragstypen

Meine Archivabfrage enthält eine benutzerdefinierte posts_per_page, order, orderby, post_type und paged (via wp-pageNavi).

array (
    'order' => 'DESC',
    'orderby' => 'title',
    'paged' => 1,
    'post_type' => Array (
        'post',
        'cust_article',
    ),
    'posts_per_page' => 15,
);

Mein post_type enthält 'post' und 'cust_article'.
Ich habe 1 'Post' und 65 'Cust_article'. posts_per_page ist derzeit in admin auf 5 gesetzt.

Mein Problem ist, dass die maximale Anzahl der Seiten durch die Anzahl der Seiten begrenzt ist, die 'post' enthält. Da ich nur einen "Post" habe, sind die Seiten auf 1 beschränkt, obwohl alle Seiten angezeigt werden (5 Seiten, posts_per_page auf 15 gesetzt). Andere Seiten als Seite 1 geben 404 zurück.
Wenn Sie einen zweiten "Beitrag" erstellen und posts_per_page auf 1 setzen, können Sie auf die zweite Seite zugreifen. Auf den folgenden Seiten wird ebenfalls 404 zurückgegeben.

Ich verwende dieselbe Abfrage für meine benutzerdefinierten post_type-Archive, wobei ein einziger post_type den gleichen Fehler verursacht, wenn der Abfrage eine Sekunde hinzugefügt wird.

Ich weiß, dass das Paging durch die Anzahl der Posts und die eingestellte Option posts_per_page begrenzt ist. 5 Seiten pro Person und 21 Beiträge => maximal 5 Seiten
Theoretisch sollten Posts von 2 post_types die Anzahl der Posts erhöhen. 5ppp und 21 posts + 12 posts => max 7 pages

4
AlexG

Milo hat recht, Sie sollten pre_get_posts verwenden, anstatt beim Laden eine zweite Abfrage aufzurufen. Dies erleichtert das Blättern erheblich. Unabhängig davon, welche Orderby-Sitzung Sie verwenden, sollte diese weiterhin im Hook verfügbar sein. Der Code dafür ist ebenfalls recht einfach und sieht folgendermaßen aus:

/**
 * Modify the query before it gets loaded
 *
 * @param WP_Query Object $query
 *
 * @return void
 */
function wpse_228230( $query ) {

    if( $query->is_admin ) {
        return;
    }

    // Your archive conditional here
    if( is_post_type_archive() ) {
        $query->set( 'post_type', array( 'post', 'cust_article' ) );
        $query->set( 'posts_per_page', 15 );
        $query->set( 'orderby', array( 'title' => 'DESC' ) );
    }

}
add_action( 'pre_get_posts', 'wpse_228230' );

Dadurch wird die Hauptabfrage geändert, bevor sie die Datenbank erreicht. Andernfalls wird WordPress die natürliche Abfrage erhalten, Ihre benutzerdefinierte WP_Query treffen und die Datenbank erneut pingen, was unnötigen Aufwand bedeutet.

3
Howdy_McGee