Пагинация — важный элемент навигации на сайте WordPress, особенно если у вас большой объем контента. Однако по умолчанию WordPress выводит пагинацию с большим количеством страниц, что может усложнить пользовательский опыт и замедлить загрузку страниц. В этой статье мы подробно рассмотрим, как установить границы пагинации, то есть ограничить количество видимых ссылок страниц, чтобы навигация стала более удобной и эффективной.
Почему важно ограничивать количество ссылок в пагинации
Пагинация с большим числом страниц выглядит громоздко и путает посетителей. Если выводить ссылки на 20 и более страниц подряд, пользователь может просто не понять, где находится нужная страница и как быстро добраться до конца списка. Более того, избыточная пагинация может негативно влиять на SEO, так как поисковые роботы тратят больше времени на обход страниц, некоторые из которых могут быть менее значимыми.
Ограничение границ пагинации позволяет:
- Сделать интерфейс чище и удобнее;
- Снизить нагрузку на сервер при генерации страниц;
- Улучшить пользовательский опыт, ускорив поиск нужной страницы;
- Оптимизировать внутреннюю перелинковку для SEO.
Как работает стандартная пагинация в WordPress
По умолчанию в WordPress для пагинации часто используется функция paginate_links() или встроенные методы в темах на основе the_posts_pagination(). Они выводят ссылки на все страницы из выборки без ограничения числа отображаемых ссылок.
Пример базового вызова:
echo paginate_links( array(
'total' => $wp_query->max_num_pages
) );Этот код выведет ссылки на все страницы, что зачастую неудобно.
Как установить границы пагинации с помощью параметра end_size и mid_size
В функции paginate_links() есть параметры end_size и mid_size, которые отвечают за количество ссылок в начале/конце и вокруг текущей страницы соответственно.
Пример настройки:
echo paginate_links( array(
'total' => $wp_query->max_num_pages,
'current' => max(1, get_query_var('paged')),
'end_size' => 2, // Ссылки в начале и конце
'mid_size' => 1, // Ссылки вокруг текущей страницы
'prev_text' => __('« Назад'),
'next_text' => __('Вперед »'),
) );В этом примере будет показано по 2 ссылки в начале и конце списка, и по 1 ссылке с каждой стороны от текущей страницы. Остальные страницы заменяются троеточием.
Создание собственной функции для управления пагинацией в теме WPtalk
Если вы хотите более гибко управлять пагинацией, можно написать собственную функцию с использованием paginate_links() и дополнительной логикой. Вот пример функции с префиксом wptalk_ для темы или плагина:
function wptalk_get_pagination( $total_pages, $current_page ) {
if ( $total_pages <= 1 ) {
return '';
}
$args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => $current_page,
'total' => $total_pages,
'end_size' => 1,
'mid_size' => 2,
'prev_text' => '«',
'next_text' => '»',
);
return paginate_links( $args );
}Использовать функцию можно так:
global $wp_query;
echo wptalk_get_pagination( $wp_query->max_num_pages, max(1, get_query_var('paged')) );Такая функция выводит компактную и понятную пагинацию с ограниченными границами.
Как улучшить пагинацию с помощью плагина ABC Pagination
Если вы хотите не писать код самостоятельно, обратите внимание на плагин ABC Pagination от WPShop. Он позволяет гибко настраивать отображение пагинации, включая ограничение количества видимых страниц, стили и адаптивность.
Преимущества ABC Pagination:
- Настройка количества ссылок в начале, середине и конце;
- Автоматическая адаптация под мобильные устройства;
- Оптимизация скорости загрузки;
- Простая интеграция с большинством тем.
После установки плагина вы сможете управлять границами пагинации через админку без правки кода.
Обработка пагинации для пользовательских запросов и кастомных типов записей
Если на сайте используются пользовательские запросы или кастомные типы записей (CPT), пагинацию нужно настраивать дополнительно, учитывая параметры запроса.
Пример пагинации для CPT «portfolio»:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => 10,
'paged' => $paged
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// Вывод контента
}
echo wptalk_get_pagination( $query->max_num_pages, $paged );
}
wp_reset_postdata();Обязательно используйте wp_reset_postdata() после работы с кастомным запросом, чтобы не нарушить основной цикл.
Частые ошибки при настройке границ пагинации и как их избежать
1. Не учитывают параметр current. Если current не передать или передать неправильно, пагинация будет работать некорректно.
Убедитесь, что в функцию передается актуальное значение текущей страницы, например: max(1, get_query_var('paged')).
2. Использование неправильного формата ссылок. В параметре base важно корректно указать шаблон ссылки, иначе пагинация приведет на неправильные URL.
3. Отсутствие поддержки ЧПУ. Если на сайте включены красивые постоянные ссылки, используйте формат с «page/%#%/», для стандартных — «?paged=%#%».
4. Не сбрасывают данные после кастомных запросов. Это может приводить к ошибкам в главном цикле и пагинации.
Выводы и рекомендации по установке границ пагинации
Установка границ пагинации — важный шаг для улучшения удобства навигации и оптимизации сайта. Используйте параметры end_size и mid_size в стандартной функции paginate_links() или создайте собственную функцию с необходимой логикой.
Если вы предпочитаете готовые решения, рассмотрите плагин ABC Pagination, который значительно расширит возможности стандартной пагинации без правок кода.
Пример кастомной функции и рекомендации по ее использованию помогут вам контролировать и ограничивать количество ссылок пагинации, делая сайт удобнее и быстрее.