Benutzerdefiniertes Post-Archiv, nicht in Bezug auf ‘posts_per_page’ => -1

Ich habe ein benutzerdefiniertes Post-Archiv, in dem WP_Query zum Abrufen der Posts verwendet wird. Ich möchte die Paginierung deaktivieren und alle Posts in diesem Archiv anzeigen, aber die folgende Abfrage funktioniert nicht:

 $args = array( 'post_type' => array( 'cpt_sports', ), 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'desc', 'max_num_pages' => 1 ); $all_sports = new WP_Query($args); 

Was mache ich hier falsch?

Solutions Collecting From Web of "Benutzerdefiniertes Post-Archiv, nicht in Bezug auf ‘posts_per_page’ => -1"

WP_Query ist für sekundäre Schleifen. Das heißt, dass es völlig unabhängig von der Standard- $wp_query der Seite ist. Ich vermute, dass es nicht funktioniert, weil Sie nicht auf Ihr neues WP_Query Objekt in der Schleife WP_Query . Um dies zu tun, würden Sie Folgendes tun:

 if( $all_sports->have_posts() ) : while( $all_sports->have_posts() ) : $all_sports->the_post(); // do stuff endwhile; endif; 

JEDOCH solltest du das nicht tun!

Stattdessen ist dies eine perfekte Verwendung der Aktion pre_get_posts . Diese Aktion kann verwendet werden, um die Standardabfrage auf einer beliebigen Seite ohne Änderungen an der Seitenvorlage zu ändern. Da Sie lediglich die standardmäßige Archivierungsabfrage nach dem benutzerdefinierten Post-Typ ändern möchten, möchten Sie dies. Hier ist ein nicht getesteter Code, der wahrscheinlich den Trick machen sollte:

 add_action( 'pre_get_posts', 'wpse163734_pre_get_post' ); function wpse163734_pre_get_post( $query ) { if( is_post_type_archive( 'cpt_sports' ) && !is_admin() && $query->is_main_query() ) { $query->set( 'posts_per_page', -1 ); $query->set( 'orderby', 'menu_order' ); } } 

Alle anderen Argumente, die Sie WP_Query sind WP_Query einer benutzerdefinierten Archivierungsseitenabfrage, die Sie nicht ändern müssen.