Пользовательский архив типов записей, не относящийся к "записям на странице" => -1
У меня есть собственный архив типов записей, где WP_Query
используется для извлечения записей. Я хочу отключить разбивку на страницы и показать все записи в этом архиве, но следующий запрос не работает:
$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);
Что я здесь делаю не так?
1 answers
WP_Query
предназначен для вторичных циклов. Это означает, что он полностью независим от страницы по умолчанию $wp_query
. Я подозреваю, что это не работает, потому что вы не ссылаетесь на свой новый объект WP_Query
в цикле. Чтобы сделать это, вы должны сделать следующее:
if( $all_sports->have_posts() ) : while( $all_sports->have_posts() ) : $all_sports->the_post();
// do stuff
endwhile; endif;
ОДНАКО вам не следует этого делать!
Вместо этого это идеальное использование pre_get_posts
действие. Это действие можно использовать для изменения запроса по умолчанию на любой странице без каких-либо изменений на странице шаблон. Видя, что вы просто хотите изменить запрос архива пользовательского типа записи по умолчанию, это то, что вам нужно. Вот несколько непроверенных кодов, которые, вероятно, должны сработать:
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' );
}
}
Все остальные аргументы, которые вы приводите WP_Query
, являются значениями по умолчанию для запроса страницы архива пользовательского типа записи, поэтому вам не нужно их изменять.