Пагинация — это удобный способ разбивать длинные списки записей на несколько страниц. Однако в некоторых случаях возникает необходимость полностью убрать пагинацию, например, для вывода всех записей на одной странице или для кастомных шаблонов. В этой статье мы подробно разберём, как удалить пагинацию в WordPress без использования плагинов, используя только код и настройки темы.
Почему стоит удалять пагинацию без плагинов
Использование плагинов для удаления пагинации может показаться простым решением, но оно часто приводит к дополнительной нагрузке на сайт и конфликтам с другими расширениями. Кроме того, плагины могут не учитывать особенности вашей темы и кастомных запросов.
Удаление пагинации через код даёт разработчику полный контроль над выводом записей, позволяет оптимизировать загрузку и адаптировать функционал под конкретные задачи. Это особенно важно для сайтов с уникальным дизайном и запросами.
Кроме того, вручную отключив пагинацию, вы сможете избежать проблем с SEO, которые могут возникнуть из-за неправильной маршрутизации страниц.
Как работает пагинация в WordPress: базовые принципы
Пагинация в WordPress реализуется в основном через объект WP_Query или глобальный запрос $wp_query. Параметр posts_per_page определяет, сколько записей выводится на странице, а параметр paged — текущую страницу пагинации.
При загрузке страницы WordPress формирует запрос, учитывающий эти параметры, и выводит записи в цикле. Стандартные функции для вывода пагинации — paginate_links(), previous_posts_link() и next_posts_link().
Чтобы убрать пагинацию, нужно изменить параметры запроса так, чтобы все записи выводились сразу, а также удалить или скрыть элементы навигации.
Метод 1: Установка параметра posts_per_page в -1
Самый простой способ — изменить основной запрос, указав posts_per_page равным -1. Это заставит WordPress вывести все записи сразу без разделения на страницы.
Если вы хотите применить это на главной странице или архиве, используйте фильтр pre_get_posts. Пример кода для файла functions.php вашей темы:
function wpmax_remove_pagination_pre_get_posts($query) {
if (!is_admin() && $query->is_main_query() && (is_home() || is_archive())) {
$query->set('posts_per_page', -1);
}
}
add_action('pre_get_posts', 'wpmax_remove_pagination_pre_get_posts');Этот код проверяет, что запрос главный и не в админке, а также что это главная или архивная страница. Затем устанавливает вывод всех записей без пагинации.
Важно помнить, что вывод большого количества записей может замедлить загрузку страницы и увеличить потребление памяти, особенно на больших сайтах.
Метод 2: Удаление элементов навигации в шаблонах темы
Даже если вы вывели все записи на одной странице, в шаблонах могут остаться функции, выводящие ссылки пагинации. Чтобы их убрать, найдите в файлах темы вызовы функций:
the_posts_pagination()paginate_links()previous_posts_link()иnext_posts_link()
Удалите или закомментируйте эти вызовы. Например, в файле index.php или archive.php:
<?php
// the_posts_pagination(); // Удаляем пагинацию
?>Если ваша тема использует кастомные функции для пагинации, например wpmax_custom_pagination(), отключите их аналогично.
Как проверить наличие пагинации в шаблонах
Для поиска пагинации быстро просмотрите файлы темы с помощью IDE или командной строки, например:
grep -rnw 'wp-content/themes/your-theme' -e 'paginate_links'Замените your-theme на название вашей темы. Аналогично проверьте другие функции пагинации.
Метод 3: Использование пользовательского WP_Query для вывода всех записей без пагинации
Если вы хотите вывести записи в кастомном шаблоне или на странице, можно создать собственный запрос с параметром posts_per_page равным -1 и без параметра paged:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC'
);
$wpmax_query = new WP_Query($args);
if ($wpmax_query->have_posts()) {
while ($wpmax_query->have_posts()) {
$wpmax_query->the_post();
// Выводим контент записи
the_title('<h2>', '</h2>');
the_excerpt();
}
wp_reset_postdata();
} else {
echo '<p>Записей не найдено.</p>';
}Этот код выводит все записи без пагинации, сортируя их по дате. Такой подход полезен для страничек с полным списком постов, портфолио или галерей.
Рекомендации по оптимизации и SEO
Вывод всех записей на одной странице может негативно сказаться на скорости загрузки и удобстве пользователей, особенно если записей очень много. Поэтому рекомендуем:
- Оценить количество записей и, если их более 100, подумать об альтернативных способах вывода.
- Использовать кэширование страниц, чтобы снизить нагрузку на сервер.
- При необходимости разбивать записи по категориям или тегам, чтобы уменьшить объём одного запроса.
- Для SEO лучше использовать canonical-ссылки и избегать дублирующегося контента.
Код для добавления canonical-ссылки в header.php:
<?php
if (is_home() || is_archive()) {
echo '<link rel="canonical" href="' . esc_url(home_url('/')) . '" />';
}
?>Выводы и практические советы
Удаление пагинации в WordPress без плагинов — задача вполне решаемая с помощью корректной настройки запроса и правок шаблонов. Такой подход даёт полный контроль над выводом данных и помогает избежать лишних нагрузок и конфликтов.
Обязательно тестируйте изменения на локальной копии сайта или staging-сервере, особенно если у вас большой объём записей. Следите за производительностью и оперативно оптимизируйте запросы.
Используйте приведённые примеры кода как основу для своих кастомных решений и адаптируйте их под особенности вашего проекта на wpmax.ru.