Как исправить 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 Но лично я не очень люблю использовать плагины там, где можно что то сделать самому =)

14 комментариев

  1. Все сделал по инструкции, пагинация в категориях заработала, но на главной сломалась ((( Урл меняет, а контент выводится с главной. Подскажите пожалуйста, как починить ?

  2. Добрый день!
    Данное решение не совсем помогло: ошибка «404» исчезла, но при переходе по …/page/2, вновь отображается страница …/page/1.
    Можете подсказать, как поправить?

  3. Реально помогло. Думал, сейчас замучаюсь искать решение, но быстро наткнулся на эту статью. Чувак, спасибо большое!))

  4. Если у Вас постоянно первая страница — то у вас не работает 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

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *