Не выводится пагинация в 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 шт):

Автор решения: Simon

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; ?>
→ Ссылка
Автор решения: Denis
<?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; ?>
→ Ссылка