Пагинация — это стандартный механизм разбивки длинного списка записей на несколько страниц в WordPress. Однако бывают ситуации, когда требуется полностью отключить пагинацию, например, на главной странице или в архиве, чтобы вывести все записи на одной странице. В этой статье мы подробно разберём, как удалить пагинацию в WordPress без использования плагинов, используя корректные методы и примеры кода.
Почему может понадобиться удалить пагинацию
Удаление пагинации может понадобиться по разным причинам:
- Упрощение интерфейса, когда количество записей небольшое.
- Особые требования дизайна или UX.
- Необходимость вывода всех записей сразу, например, для создания каталога.
- Оптимизация для определённых кастомных шаблонов или страниц.
Важно понимать, что вывод большого количества записей на одной странице может негативно сказаться на скорости загрузки, поэтому этот приём стоит применять с осторожностью.
Как работает пагинация в WordPress
По умолчанию WordPress использует параметр paged в URL для определения текущей страницы пагинации, а в запросе WP_Query передаёт параметр posts_per_page для ограничения количества записей на страницу.
Чтобы убрать пагинацию, нужно изменить запрос так, чтобы он возвращал все записи сразу, то есть установить posts_per_page в число, равное общему количеству записей.
Удаление пагинации на главной странице и архивах с помощью pre_get_posts
Одним из наиболее корректных способов является использование хука pre_get_posts. В этом случае мы можем изменить параметры основного запроса до того, как WordPress его выполнит.
Ниже пример функции, которая отключает пагинацию на главной странице и в архивах, выводя все записи сразу:
function wpdo_remove_pagination(\WP_Query $query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( is_home() || is_archive() ) {
// Получаем общее количество опубликованных записей
$total_posts = wpdo_get_total_posts_count();
$query->set('posts_per_page', $total_posts);
$query->set('paged', 1); // Убираем пагинацию
}
}
}
add_action('pre_get_posts', 'wpdo_remove_pagination');
function wpdo_get_total_posts_count() {
$count_posts = wp_count_posts();
return $count_posts->publish;
}В этом коде функция wpdo_remove_pagination проверяет, что это основной запрос и не админка, после чего меняет параметр posts_per_page на общее количество опубликованных записей, effectively отключая пагинацию.
Особенности и возможные проблемы
Такой подход удобен, если на сайте не слишком много записей. Если их очень много, это может привести к большим нагрузкам на сервер и долгой загрузке страницы. В таком случае стоит подумать об альтернативных решениях.
Удаление пагинации на кастомных WP_Query
Если на сайте используются кастомные запросы через WP_Query, то для удаления пагинации нужно изменить параметры запроса при его создании.
Пример создания кастомного запроса без пагинации:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1, // Вывод всех записей
'paged' => 1,
);
$wpdo_query = new WP_Query($args);
if ($wpdo_query->have_posts()) {
while ($wpdo_query->have_posts()) {
$wpdo_query->the_post();
// Вывод записи
the_title('<h2>', '</h2>');
the_excerpt();
}
wp_reset_postdata();
}Передача 'posts_per_page' => -1 означает, что будут выведены все записи без разбивки на страницы.
Советы по использованию
- Не используйте
posts_per_page => -1на страницах с большим количеством записей. - Оптимизируйте вывод, чтобы не перегружать страницу.
- В кастомных шаблонах контролируйте пагинацию по необходимости.
Удаление пагинации из шаблонов — что нужно учесть
Даже если вы отключили пагинацию через параметры запроса, в шаблонах WordPress (например, index.php, archive.php) может оставаться вызов функций вывода пагинации, таких как the_posts_pagination() или paginate_links().
Чтобы полностью убрать пагинацию с сайта, нужно удалить или закомментировать эти вызовы в шаблонах, либо обернуть их в условие:
if ( false ) {
the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => __('« Назад'),
'next_text' => __('Вперед »'),
));
}Или динамически проверять, нужна ли пагинация на странице.
Использование плагина Clearfy Pro для гибкого управления пагинацией
Если вы хотите иметь возможность быстро включать и отключать пагинацию без правки кода, обратите внимание на плагин Clearfy Pro. В нём предусмотрены опции для управления различными элементами вывода на сайте, включая пагинацию.
Это удобное решение для тех, кто не хочет заниматься программированием, но нуждается в быстром контроле над функциональностью.
Выводы и рекомендации
Удаление пагинации без плагинов в WordPress сводится к изменению параметров запроса и корректировке шаблонов. Используйте хук pre_get_posts для изменения основного запроса, а для кастомных запросов задавайте posts_per_page => -1. Обязательно убирайте вызовы вывода пагинации из шаблонов, чтобы не было пустых элементов.
Помните, что вывод большого количества записей может замедлить сайт, поэтому всегда оценивайте нагрузку и тестируйте изменения.