Пагинация для пользовательского WP_Query: пример использования и настройка

## Пагинация для пользовательского 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!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *