Диагностика проблемы ошибки 404 на страницах пагинации
Ошибка 404 при переходе по страницам пагинации — частая проблема в WordPress, особенно при использовании кастомных запросов или после изменений в структуре постоянных ссылок. Обычно это проявляется, когда на странице постов или кастомном архиве при переходе на вторую, третью и далее страницы выводится ошибка «Страница не найдена».
Чтобы проверить, связана ли ошибка с пагинацией, сделайте следующее:
- Перейдите на страницу архива или блога.
- Кликните на ссылку пагинации, например, «2» или «Следующая».
- Если возникает 404, проблема именно в пагинации.
- Проверьте настройки постоянных ссылок в Админке WordPress в разделе
Настройки > Постоянные ссылки, попробуйте сохранить их повторно без изменений.
Основные причины возникновения ошибки 404 на страницах пагинации
1. Неправильное использование параметра paged в WP_Query
Если вы используете собственный запрос WP_Query для вывода постов, нужно передать параметр paged из глобального объекта $paged или get_query_var('paged'). Без этого WordPress не сможет корректно определить текущую страницу пагинации.
2. Конфликты постоянных ссылок и кастомных правил перезаписи
Если в теме или плагинах добавлены кастомные правила для ЧПУ, они могут конфликтовать с правилами для пагинации. Это особенно часто бывает при использовании таксономий и кастомных типов записей.
3. Отсутствие вызова wp_reset_postdata() после кастомных запросов
Если после кастомного запроса не сбросить данные глобального запроса, пагинация может работать некорректно.
Пошаговое решение: исправляем ошибку 404 на страницах пагинации
Шаг 1. Корректно передаём параметр paged в WP_Query
В шаблоне (например, archive.php или кастомном шаблоне) нужно получить текущую страницу пагинации и передать её в WP_Query:
if (get_query_var('paged')) {
$paged = get_query_var('paged');
} elseif (get_query_var('page')) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$args = [
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged,
];
$query = new WP_Query($args);
Шаг 2. Используем правильный вывод пагинации
Для вывода пагинации используйте встроенную функцию paginate_links() или популярный плагин WP-PageNavi с правильной настройкой. Пример с paginate_links():
echo paginate_links([
'total' => $query->max_num_pages,
'current' => $paged,
'format' => '?paged=%#%',
]);
Шаг 3. Сохраняем структуру постоянных ссылок
Перейдите в Настройки > Постоянные ссылки и нажмите «Сохранить изменения» без правок — это сбросит правила перезаписи и обновит .htaccess.
Шаг 4. Сброс данных запроса после кастомного WP_Query
wp_reset_postdata();Это важно, чтобы избежать конфликтов с основным глобальным запросом WordPress.
Проверка результата после внедрения решения
После внесённых изменений проверьте:
- Перейдите на страницу с кастомным запросом и пагинацией.
- Нажмите на ссылки пагинации (2, 3, …).
- Страницы должны корректно отображаться без ошибки 404.
- При проблемах проверьте в консоли браузера и логах сервера ошибки, также попробуйте временно отключить другие плагины для проверки конфликтов.
Частые ошибки и их исправление
- Ошибка: Не передан параметр
pagedв WP_Query.
Исправление: Получите номер страницы черезget_query_var('paged')и передайте в запрос. - Ошибка: Неправильный формат постоянных ссылок.
Исправление: Перейдите в настройки постоянных ссылок и сохраните их заново. - Ошибка: Кастомные правила перезаписи конфликтуют с пагинацией.
Исправление: Проверьте функциюadd_rewrite_rule()или плагины, влияющие на ЧПУ, отключите или исправьте их. - Ошибка: Не вызван
wp_reset_postdata()после кастомного запроса.
Исправление: Добавьте вызов этой функции после цикла.
Практические советы по безопасности и производительности
- Используйте
WP_Queryс минимально необходимыми параметрами, чтобы избежать перегрузки базы данных. - Проверяйте и очищайте кеш после изменений в структуре пагинации.
- Для больших сайтов подумайте об использовании плагинов кеширования, совместимых с пагинацией, например, WP Rocket или Clearfy Pro (ссылка).
- Избегайте избыточных сложных запросов с множеством join и meta-записей, если это не критично.
Сравнение способов решения ошибки 404 при пагинации
| Метод | Плюсы | Минусы |
|---|---|---|
Правильное использование paged в WP_Query | Нативное решение, универсальное, не требует плагинов | Требует корректного кода в теме |
| Сброс постоянных ссылок | Простое и быстрое решение | Иногда не помогает при кастомных правилах |
| Использование плагинов (WP-PageNavi) | Упрощает вывод пагинации, готовые шаблоны | Может конфликтовать с кастомным кодом |