Не выводится пагинация в WordPress
Вот вывод кастомных постов. Использую плагин ACF
<?php
$ids = get_field('news_thumbs');
$query = new WP_Query(array(
'post_type' => get_post_type(),
'posts_per_page' => 1,
'post__in' => $ids
));
if( $ids ): ?>
<?php foreach( $ids as $post):
setup_postdata($post);
the_permalink();
endforeach; ?>
<? the_posts_pagination(); ?>
<?php wp_reset_postdata();?>
<?php endif; ?>
Пагинация не выводится. "posts_per_page" тоже не учитывается. Выводит все равно все посты вместо одного. Что я делаю не так?
Ответы (2 шт):
the_posts_pagination() не будет работать с Вашим запросом, так как она работает с основным запросом $wp_query, вместо нее используйте paginate_links() подробнее об этой ф-ции тут.
Я немного подправлю Ваш код, потому что вообще непонятно зачем вы создаете новый WP_Query, если перебираете записи при помощи foreach используете setup_postdata() для каждой записи и никоим образом ничего не делаете с Вашим объектом, в документации ACF показано немного другое. Оставлю WP_Query, будет что-то вроде:
<?php
$ids = get_field( 'news_thumbs' );
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
$query = new WP_Query( [
'post_type' => 'news',
'posts_per_page' => 1,
'post__in' => $ids,
'paged' => $paged,
'orderby' => 'post__in',
'order' => 'ASC'
] );
if ( $query->have_posts() ):
while ( $query->have_posts() ) : $query->the_post();
the_permalink();
endwhile;
wp_reset_postdata();
$big = 999999999;
echo wp_kses_post( paginate_links( [
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $query->max_num_pages
] ) );
endif; ?>
<?php
$ids = get_field( 'news_thumbs');
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
$query = new WP_Query( [
'post_type' => 'news',
'posts_per_page' => 1,
'post__in' => $ids,
'paged' => $paged,
'orderby' => 'post__in',
'order' => 'ASC'
]);
if ( $query->have_posts() ):
while ( $query->have_posts() ) : $query->the_post();
?><a href="<? the_permalink()?>"><? echo the_title();?></a><?
endwhile;
wp_reset_postdata();
$big = 999999999;
?><br /><?
echo wp_kses_post( paginate_links( [
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $query->max_num_pages,
'prev_text' => __('« Previous'),
'next_text' => __('Next »'),
] ) );
endif; ?>