## Пагинация для пользовательского WP_Query
В этом примере мы покажем, как отобразить товары WooCommerce (post_type=product) на отдельной странице записи (post_type=post). То есть мы будем использовать произвольный запр��с и создавать пагинацию для него.
### Запрос товаров
Для начала создадим запрос, который получит товары из магазина:
$query = new WP_Query( [
'post_type' => 'product', // Тип записи - товар
'posts_per_page' => 5, // Количество товаров на странице
'paged' => get_query_var( 'paged' ), // Номер текущей страницы
] );
### Обработка полученных товаров
Теперь мы обработаем товары, если они есть:
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' => max( 1, get_query_var( 'paged' ) ), // Текущая страница
'total' => (int) $query->max_num_pages, // Общее количество страниц
] );
### Как это работает
В нашем примере мы указали выводить 5 товаров. Если у вас, например, 22 товара, то пагинация будет выглядеть так:
- Текущая страница (5 товаров, без ссылки)
- [Страница 2](http://example.com/название-записи/2/) (5 товаров)
- [Страница 3](http://example.com/название-записи/3/) (5 товаров)
- [Страница 4](http://example.com/название-записи/4/) (5 товаров)
- [Страница 5](http://example.com/название-записи/5/) (2 товара)
### Важно помнить
- **Параметр base**: В этом параметре не используйте слова page
или paged
. Использование page
может привести к перенаправлению с страницы пагинации на саму запись, а paged
вызовет ошибку 404.
- Используйте get_query_var( 'paged' )
вместо get_query_var( 'page' )
, чтобы получить номер страницы пагинации.
- Этот код не будет работать на страницах, где контент разделен на несколько страниц с помощью тега <!--nextpage-->
.
Теперь вы знаете, как реализовать пагинацию для пользовательского WP_Query!