В WordPress часто возникает задача сделать пагинацию для архивов кастомных типов записей (Custom Post Types, CPT). Стандартные функции пагинации не всегда работают корректно в таких случаях, особенно при кастомных запросах WP_Query. В этой статье разберём, как правильно реализовать пагинацию для архивов CPT с помощью популярного плагина WP-PageNavi, чтобы пользовательский интерфейс оставался удобным, а SEO — оптимальным.
Почему стандартная пагинация не всегда подходит для CPT
WordPress по умолчанию использует глобальный объект $wp_query для построения пагинации на страницах архивов. Однако если вы используете собственный запрос через WP_Query для вывода кастомных записей, стандартная пагинация не будет знать о вашем запросе и будет отображать некорректные ссылки.
Плагин WP-PageNavi упрощает создание пагинации, но его функции также ориентированы на глобальный запрос. Чтобы пагинация корректно работала с кастомным запросом, нужно передавать в неё параметры вашего WP_Query.
Пример неправильного использования:
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// вывод записей
endwhile;
wp_pagenavi(); // пагинация для глобального запроса
endif;
Если в этом месте у вас кастомный WP_Query, wp_pagenavi() покажет пагинацию для глобального запроса, а не вашего.
Как правильно использовать WP-PageNavi для пагинации CPT
Для корректной пагинации необходимо:
- Создать WP_Query с параметрами для CPT и пагинации;
- Передать этот объект в функцию
wp_pagenavi(); - Обеспечить правильную навигацию с помощью параметра
paged.
Рассмотрим пример. Допустим, у вас есть кастомный тип записей product, и вы хотите вывести архив с пагинацией.
function wppagenavi_get_paged() {
return max( 1, get_query_var('paged') );
}
$paged = wppagenavi_get_paged();
$args = [
'post_type' => 'product',
'posts_per_page' => 10,
'paged' => $paged
];
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) :
while ( $custom_query->have_posts() ) : $custom_query->the_post();
// вывод контента записи
endwhile;
wp_pagenavi( [ 'query' => $custom_query ] );
wp_reset_postdata();
else :
echo '<p>Записей не найдено.</p>';
endif;
Обратите внимание, что в вызове wp_pagenavi() мы передаём параметр query с нашим объектом WP_Query. Это гарантирует, что пагинация будет работать именно с нашим запросом.
Обработка параметра paged для корректной навигации
Переменная paged отвечает за текущую страницу пагинации. Важно правильно её получить. Иногда бывает, что get_query_var('paged') возвращает 0 или пустое значение, особенно если используется ЧПУ или кастомные правила пермалинков.
Функция wppagenavi_get_paged() в примере выше возвращает минимум 1, что предотвращает ошибки при формировании запроса.
Если у вас есть пагинация с несколькими параметрами (например, фильтры или сортировка), убедитесь, что все они корректно передаются в URL и обрабатываются в WP_Query.
Пример интеграции с WP-Shop продукцией
Если вы используете в связке с CPT какой-либо плагин из WPShop, например, для создания каталога товаров, то пагинация на архиве станет ещё важнее.
Например, для кастомного запроса с фильтрами из плагина Clearfy Pro или Expert Review можно расширить WP_Query, добавив мета-запросы и передать в wp_pagenavi() уже итоговый объект:
$args = [
'post_type' => 'product',
'posts_per_page' => 12,
'paged' => $paged,
'meta_query' => [
[
'key' => 'wppagenavi_clearfy_rating',
'value' => 4,
'compare' => '>='
]
]
];
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) {
// вывод записей
wp_pagenavi( ['query' => $custom_query] );
}
wp_reset_postdata();
Такой подход позволяет гибко строить пагинацию даже для сложных каталогов.
Советы по SEO и UX для пагинации архивов CPT
Правильная пагинация улучшает восприятие сайта пользователями и поисковыми системами. Вот несколько рекомендаций:
- Используйте ключевой параметр
pagedдля правильной адресации страниц; - Добавьте в шаблон пагинации rel="next" и rel="prev" для улучшения индексации;
- Ограничьте количество записей на странице, чтобы не перегружать страницу;
- Проверяйте, что в URL не появляются дублирующиеся параметры, чтобы избежать проблем с каноникализацией.
Плагин WP-PageNavi помогает быстро и красиво оформить пагинацию, а приведённые примеры кода гарантируют её корректную работу именно с кастомными типами записей.
Заключение
Реализация пагинации для архивов кастомных типов записей — задача несложная, если учитывать нюансы работы WP_Query и использовать функционал WP-PageNavi с передачей объекта запроса. Такой подход обеспечит корректное отображение страниц, удобство пользователей и улучшит SEO-показатели вашего сайта на WordPress.