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