Диагностика ошибки 404 при пагинации WooCommerce
Ошибка 404 при переходе по страницам пагинации WooCommerce — распространённая проблема, возникающая чаще всего из-за неправильных настроек постоянных ссылок или конфликтов в теме и плагинах. Прежде чем приступать к исправлению, необходимо проверить следующие моменты:
- Верны ли настройки постоянных ссылок в админке WordPress (Настройки > Постоянные ссылки).
- Используется ли стандартный или кастомный шаблон для архива товаров.
- Не конфликтуют ли сторонние плагины, особенно кэширования и SEO.
- Правильно ли используется параметр
pagedв WP_Query, если пагинация кастомизирована.
Для первичной проверки можно попытаться сбросить настройки постоянных ссылок — просто сохранить их заново без изменений. Если проблема не исчезает, нужно проверить код, который отвечает за вывод товаров и пагинацию.
Пошаговое решение проблемы 404 на страницах пагинации WooCommerce
1. Сброс постоянных ссылок
В админке перейдите в Настройки > Постоянные ссылки и нажмите «Сохранить изменения» без внесения правок. Это обновит правила перезаписи URL (rewrite rules).
2. Проверка корректности WP_Query с параметром paged
Если вы используете кастомный запрос для вывода товаров, убедитесь, что передаете параметр paged правильно:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = [
'post_type' => 'product',
'posts_per_page' => 12,
'paged' => $paged,
];
$query = new WP_Query($args);Без правильного определения paged пагинация не будет работать, и при переходе на страницу 2 и дальше будет 404.
3. Использование правильных функций для вывода пагинации
Для WooCommerce рекомендуют использовать стандартную функцию woocommerce_pagination(), которая корректно учитывает все нюансы. Пример вывода пагинации:
if ($query->max_num_pages > 1) {
woocommerce_pagination();
}Если вы выводите пагинацию вручную, используйте paginate_links() с правильными параметрами. Например:
echo paginate_links([
'base' => str_replace(999999999, '%#%', esc_url(get_pagenum_link(999999999))),
'format' => '?paged=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $query->max_num_pages,
]);4. Проверка шаблонов и хуков WooCommerce
Проверьте, не переопределяете ли вы шаблоны WooCommerce в теме, где пагинация может быть неправильно реализована. Файлы находятся в папке your-theme/woocommerce/. Особенно обратите внимание на archive-product.php и файлы шаблонов для вывода товаров.
Проверка результата после внедрения
После внесения изменений:
- Очистите кэш сайта и браузера.
- Перейдите на страницу каталога товаров.
- Переходите по страницам пагинации вперед и назад.
- Убедитесь, что URL меняется корректно, и страницы не выдают ошибку 404.
- Проверьте, что товары на каждой странице выводятся корректно.
Частые ошибки и их исправление
- Не передан параметр
pagedв WP_Query. Решение: обязательно добавить'paged' => $pagedв аргументы запроса. - Конфликт плагинов кэширования и SEO. Решение: временно отключить эти плагины, проверить пагинацию, затем настроить исключения в кэше.
- Неправильные настройки постоянных ссылок. Решение: сбросить постоянные ссылки в админке.
- Кастомные шаблоны WooCommerce без вызова стандартных хуков. Решение: использовать функцию
woocommerce_pagination()или корректно реализовать пагинацию сpaginate_links().
Практические советы для стабильной и безопасной пагинации WooCommerce
- Используйте стандартные функции WooCommerce для вывода товаров и пагинации — это уменьшит вероятность ошибок при обновлениях.
- При кастомизации WP_Query всегда учитывайте
paged, иначе пагинация не будет работать. - Избегайте вывода пагинации на страницах с одним товаром или если товаров нет.
- Проверяйте темы и плагины на совместимость с последней версией WooCommerce.
- Для лучшей производительности используйте кэширование страниц и запросов, исключая пагинацию или настраивая её правильно.
Сравнение вариантов реализации пагинации WooCommerce
| Вариант | Плюсы | Минусы |
|---|---|---|
Стандартная пагинация WooCommerce (woocommerce_pagination()) | Простая, поддерживается официально, учитывает все нюансы WooCommerce | Меньше гибкости для кастомизации |
Кастомный WP_Query с paginate_links() | Полный контроль над запросом и выводом | Требует правильной реализации, легко допустить ошибки |
| Плагины для пагинации (например, WP-PageNavi) | Удобство, расширенные настройки, готовые стили | Могут конфликтовать с WooCommerce, требуют дополнительной настройки |