Не работает пагинация
Пытаюсь вывести товары в цикле с пагинацией с помощью цикла, но пагинация почему-то не работает.
$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' );
}
подскажите, в чём ещё может быть проблема?