В стандартных установках WordPress при выводе записей на страницу часто автоматически добавляется пагинация — навигация по страницам с номерами. В большинстве случаев это удобно, однако бывают ситуации, когда требуется полностью отключить эту автоматическую пагинацию и вывести все записи одним списком без разделения на страницы. В этой статье подробно разберём, как отключить автоматическую пагинацию в WordPress и какие инструменты при этом помогут.
Что такое автоматическая пагинация в WordPress и почему её отключают
Автоматическая пагинация — это способ разбить длинный список записей на несколько страниц, чтобы улучшить удобство просмотра и снизить нагрузку на сервер. WordPress по умолчанию использует параметры posts_per_page и paged в запросах для вывода страниц с постами.
Однако бывают ситуации, когда:
- Необходимо вывести все записи сразу, например, для создания единого архива или каталога.
- Механизм пагинации конфликтует с кастомными скриптами или плагинами.
- Желаете реализовать собственную пагинацию с другой логикой.
В таких случаях отключение автоматической пагинации поможет получить полный контроль над выводом записей.
Как отключить пагинацию через изменение WP_Query
Самый простой способ — изменить параметры запроса WordPress, чтобы вернуть все записи за один запрос и не использовать разбивку на страницы. Для этого можно использовать хук pre_get_posts. Пример кода для functions.php вашей темы или плагина:
function journalx_disable_pagination( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
// Убираем пагинацию на главной странице и архиве
$query->set( 'posts_per_page', -1 ); // Вывести все записи
$query->set( 'paged', 1 ); // Отключаем постраничность
}
}
add_action( 'pre_get_posts', 'journalx_disable_pagination' );В этом коде все записи будут выводиться на главной или архивных страницах без разбивки на страницы. Параметр posts_per_page = -1 заставляет WP вернуть все записи.
Важные нюансы отключения пагинации через WP_Query
При таком подходе стоит учитывать:
- Если записей очень много, загрузка страницы может стать медленной и повысится нагрузка на сервер.
- Другие части сайта, где нужна пагинация, могут затронуться, если условие недостаточно точно.
- Если используется кэширование, обновите или сбросьте кэш после внесения изменений.
Отключение пагинации в шаблонах темы
Иногда пагинация выводится напрямую в шаблонах темы, например, с помощью функций the_posts_pagination(), paginate_links() или previous_posts_link() и next_posts_link(). Чтобы полностью убрать пагинацию, достаточно удалить или закомментировать соответствующий блок кода в файлах темы, например, в index.php, archive.php или home.php.
Пример удаления пагинации в шаблоне:
<?php
// Удаляем следующий блок
// the_posts_pagination();
?>Однако такой метод не отключает пагинацию на уровне запроса, а просто не выводит навигационные ссылки.
Плагины для управления пагинацией в WordPress
Если хотите более гибко управлять пагинацией без правки кода, можно использовать плагины. Вот несколько подходящих:
- Clearfy Pro — плагин оптимизации, в том числе умеет отключать ненужные элементы темы и может помочь с пагинацией. Подробнее на wpshop.ru.
- WPCommunity Pagination — расширенные возможности по кастомизации пагинации.
- ABC Pagination — позволяет создать кастомную пагинацию с уникальным дизайном и логикой.
Использование плагинов удобно, если вы не хотите править код и хотите получить удобный интерфейс.
Как реализовать собственную пагинацию без автоматической
Если отключить автоматическую пагинацию, но при этом нужна навигация, то придётся реализовать её самостоятельно. Пример простейшей кастомной пагинации с использованием WP_Query:
function journalx_custom_pagination() {
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 5, // Количество записей на странице
'paged' => $paged
);
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) {
while ( $custom_query->have_posts() ) {
$custom_query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
the_excerpt();
}
// Навигация
$big = 999999999; // уникальное число для замены
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, $paged ),
'total' => $custom_query->max_num_pages
) );
}
wp_reset_postdata();
}Вызовите функцию journalx_custom_pagination() в нужном месте шаблона, чтобы вывести посты с собственной пагинацией.
Резюме и рекомендации
Отключение автоматической пагинации в WordPress — задача, требующая внимательного подхода. Самый простой и безопасный способ — изменить параметры основного запроса через pre_get_posts. Если нужно просто убрать навигацию, можно удалить вызовы пагинации из темы. Для более сложных сценариев стоит реализовать собственную пагинацию или использовать специализированные плагины.
При большом объёме записей будьте осторожны с выводом всех записей сразу — это может замедлить сайт. Для оптимизации подойдут плагины, например, Clearfy Pro, которые помогут не только с пагинацией, но и с общей производительностью.