GetPosts и пагинация
Попытался сделать основной цикл (в home.php) следующим образом:
<?php global $post; $args = array( 'numberposts' => 0, 'posts_per_page' => 55 ); $columns_num = 5; // The number of columns we want to display our posts $i = 0; //Counter for .row divs $myposts = get_posts( $args ); foreach ( $myposts as $post ) { setup_postdata( $post ); // вывод записей get_template_part( 'parts/card' ); if ( $i % $columns_num == $columns_num - 1 ) { echo '</div> <div class="row">'; } $i++; } wp_reset_postdata(); ?>
Вывод - корректный. НО не работает пагинация:
<div class="row"> <div class="col-12"> <?php if (function_exists('wp_corenavi')) wp_corenavi(); ?> </div> </div>
(отображается тот же набор постов, что и на первой странице)
По причине быстродействия (выигрыш в 4-5 раз по сравнению со стандартным циклом if have posts while have posts the posts, в котором пагинация работает корректно), очень хотелось бы применить именно get_posts.
ВОПРОС: есть ли способ починить пагинацию?
Пагинация выводится для главного цикла (именно того have_posts() while have_posts и т.д.). А ваш цикл повторяется каждый раз, на каждой странице.
Не придумывайте - используйте стандартный цикл (запрос этих постов в любом случае происходит, не важно - выводите вы их или нет). Если нужно вмешаться в стандартный запрос страницы используйте фильтр pre_get_posts.
Уже отвечал: https://wp-kama.ru/question/funktsiya-get_posts-i-paginatsiya-kak-podklyuchit
Спасибо!