Как исправить 404 ошибку в пагинации WordPress
Разрабатывая тему для сайта столкнулся со следующей проблемой – 404 ошибка при использовании пагинации в файле category.php с помощью функции the_posts_pagination()
Задавшись вопросом почему не работает функция the_posts_pagination () стал искать ответ в рунете. Как ни странно конкретного ответа на этот вопрос найти не получилось, но я понял, что не первый, кто с ней столкнулся и вырисовывалась следующая картинка.
Итак, что же происходит?
Данная ситуация возникает тогда, когда в настройках сайта, в разделе “Настройки постоянных ссылок” выбран произвольный формат:
/%category%/%postname%/
И вроде бы сначала, все хорошо, но когда мы переходим на вторую страницу WordPress отправляет нас на страницу похожую на эту:
www.your_site.ru/your_taxonomy/page/2
В итоге добавленные /page/2 конфликтуют с настройкой постоянных ссылок, что и приводит к 404-ой ошибке.
Какое решение?
Нам нужно добиться двух вещей, чтобы решить эту проблему.
Во-первых, нам нужно, чтобы удалить часть URL из-за которого происходит ошибка, прежде чем WordPress пытается обработать запрашиваемый адрес. Для этого добавим следующий код в файл functions.php:
function codernote_request($query_string ) { if ( isset( $query_string['page'] ) ) { if ( ''!=$query_string['page'] ) { if ( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; } add_filter('request', 'codernote_request');
Во-вторых, реализуем механизм получения номера запрашиваемой страницы из URL и добавим его в запрос WordPress в требуемом формате. Опять же в файл functions.php добавим код:
add_action('pre_get_posts', 'codernote_pre_get_posts'); function codernote_pre_get_posts( $query ) { if ( $query->is_main_query() && !$query->is_feed() && !is_admin() ) { $query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) ); } }
Что делать если нет доступа к function.php или не знаю что это?!
В этом случае вы можете использовать плагин Category pagination fix Но лично я не очень люблю использовать плагины там, где можно что то сделать самому =)
Спасибо большое! Все заработало
Все сделал по инструкции, пагинация в категориях заработала, но на главной сломалась ((( Урл меняет, а контент выводится с главной. Подскажите пожалуйста, как починить ?
Спасибо, друг! Ты очень помог! Я уже обыскался решение этой проблемы…
Спасибо! Вы настоящий мастер своего дела!
Рабочее решение, спасибо!
Спасибо! Очень помогли.
Спас меня! 🙂 Спасибо большое!
Спасибо! Пояснили причину.
Добрый день!
Данное решение не совсем помогло: ошибка “404” исчезла, но при переходе по …/page/2, вновь отображается страница …/page/1.
Можете подсказать, как поправить?
Как заставить работать is_paged(), при убранной /category/?
Полезная статья, спасибо!
Реально помогло. Думал, сейчас замучаюсь искать решение, но быстро наткнулся на эту статью. Чувак, спасибо большое!))
Если у Вас постоянно первая страница – то у вас не работает get_query_var();
По-этому Вам нужно добавить данный код:
$link = $_SERVER[‘PHP_SELF’];
$link_array = explode(‘/’,$link);
$paged = $link_array[count($link_array) – 2];
if (!is_numeric($paged)) {
$paged = 1;
}
и в массив с аргументами поместить как $paged
Огромное спасибо, за 5 минут проблема решена!
Желаю успехов!
Большое спасибо, сразу заработало)
Спасибо огромнейшее! Единственный нормальный и работающий гайд среди тонн гов#на! СПАСИБО!
Код работает. Но не работает при пагинации страниц поиска. Выдает первую страницу.
Вот пример url второй страницы: https://site.ru/page/2/?s=запрос
Спасибо, добрый человек! Шесть лет посту, а он и сегодня оказался полезен. Чуть голову не сломала, гадая, почему на одном сайте вторые и третьи страницы поиска работают, а на другом нет.
Хыммм… Однако тут же нашлась ложка дёгтя. Использование функции как она есть в статье исправило пагинацию поиска, однако страницы в таксономиях перестали работать – любое /page/n/ стало отдавать первую странцу. Справилась с проблемой, добавив в функцию codernote_pre_get_posts проверку is_search.