Не работает пагинация

Пытаюсь вывести товары в цикле с пагинацией с помощью цикла, но пагинация почему-то не работает.

$lists = ProductClass::get_data();//массив ids товоров
$total = count($lists);
$per_page = 8;
$paged = max( 1, get_query_var( 'paged' ) );
$page_links = '';
$newlist = $lists;
if($total > 1){
    $pages = absint(ceil( $total / $per_page ));
    if( $paged > $pages ){
        $paged = $pages;
    }
    $offset = ( $paged - 1 ) * $per_page;
    $newlist = array_slice($lists, $offset, $per_page);
}
$args = array(
    'posts_per_page'=> 8,
    'post_type' => 'product',
    'post_status'   => 'publish',
    'paged'     => get_query_var('paged') ? get_query_var('paged') : 1,
    'post__in' => $newlist
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
    echo '<ul class="products grid-space-default grid-items xxl-block-grid-4 xl-block-grid-4 lg-block-grid-3 md-block-grid-3 sm-block-grid-2 block-grid-1 products-grid products-grid-2">';
    while ( $loop->have_posts() ) : $loop->the_post();
        wc_get_template_part( 'content', 'product' );
    endwhile;
    echo '</ul>';
    wp_reset_postdata();

    // пагинация для произвольного запроса
    $big = 999999999; // уникальное число
    echo paginate_links( array(
        'base'    => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format'  => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total'   => $pages
    ) );
} else {
    echo __( 'No products found' );
}

т.е. пагинация под товарами выводится, и если кликнуть на страницу 2 в пагинации, откроется ссылка /page/2/ но товары будут отображаться с первой страницы и get_query_var( 'paged' ) возвращает 0 на второй странице. Как это поправить?

где-то нашёл решение:

$paged = 1;
if(get_query_var('paged')) {
    $paged = get_query_var('paged');
} elseif(get_query_var('page')) {
    $paged = get_query_var('page');}  

но оно не работает

и шорткод почему-то не показывает пагинацию: [products limit="4" columns="4" ids="'.$listIds.'" paginate="true" per_page="4"]. $listIds = implode(',',$lists);

P.S.
такой вариант также не поправил пагинацию:

global $wp_query;
$args = array(
    'posts_per_page'=> 8,
    'post_type' => 'product',
    'post_status'   => 'publish',
    'paged'     => get_query_var('paged') ? get_query_var('paged') : 1,
    'post__in' => $newlist
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
    echo '<ul class="products grid-space-default grid-items xxl-block-grid-4 xl-block-grid-4 lg-block-grid-3 md-block-grid-3 sm-block-grid-2 block-grid-1 products-grid products-grid-2">';
    while ( $loop->have_posts() ) : $loop->the_post();
        wc_get_template_part( 'content', 'product' );
    endwhile;
    echo '</ul>';

    $temp_query = $wp_query;
    $wp_query   = null;
    $wp_query   = $loop;

    // пагинация для произвольного запроса
    $big = 999999999; // уникальное число
    echo paginate_links( array(
        'base'    => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
//        'base'    => esc_url( add_query_arg( array( 'paged' => '%#%' ), get_pagenum_link( $paged+1 ) )),
        'format'  => '?paged=%#%',
        'current' => $paged,
        'total'   => $pages
    ) );

    // Reset main query object.
    $wp_query = null;
    $wp_query = $temp_query;
    wp_reset_postdata();

} else {
    echo __( 'No products found' );
}

подскажите, в чём ещё может быть проблема?


Ответы (0 шт):