Пагинация для произвольного запроса WP_Query
В примере ниже будем выводить продукты WooCommerce (post_type=product) на отдельной странице записи (post_type=post). Т.е. будем использовать произвольный запрос и сделаем для него пагинацию.
Смотрите также:
$page = max( 1, get_query_var('page') );
$query = new WP_Query( [
'post_type' => 'product',
'posts_per_page' => 5,
'paged' => $page,
] );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// тут ваш код
the_title();
}
wp_reset_postdata();
// Выводим пагинацию, если продуктов больше запрошенного количество
echo paginate_links( [
'base' => user_trailingslashit( wp_normalize_path( get_permalink() .'/%#%/' ) ),
'current' => $page,
'total' => $query->max_num_pages,
] );
}
Мы указали выводить по 5 товаров, если их, к примеру 22, то будет выведено 5 элементов пагинации, из которых 4 будут ссылками следующего вида:
Текущая страница, ссылка не выводится (5 продуктов) http://example.com/название-записи/2/ (5 продуктов) http://example.com/название-записи/3/ (5 продуктов) http://example.com/название-записи/4/ (5 продуктов) http://example.com/название-записи/5/ (2 продукта)
Обратите внимание:
-
В параметре
baseгде формируется вид ссылки пагинации не используются такие слова какpageилиpaged. Потому что cpageбудет перенаправление со страницы пагинации на саму запись, а сpagedбудет 404 ошибка на странице пагинации. -
Для получения номера страницы пагинации вместо привычного
get_query_var( 'paged' )используемget_query_var( 'page' ). - Этот код не будет работать на страницах у которых контент делиться на несколько страниц тегом
<!--nextpage-->, подробнее см. здесь.
—
Заметка встроена в: paginate_links()