WordPress: Постраничная навигация в архивах таксономий возвращает 404 ошибку.

Ранее я уже описывал проблему связанную с регистрацией таксономий и в ней тоже имела место ошибка 404. Но на этот раз ошибка появляется при переходе на вторую и более страницу постраничной навигации (пейджинации, pagination). Решение проблемы можно найти на англоязычных ресурсах, погуглив: “wordpress custom taxonomy pagination 404“. По своей сути, данная статья является выборкой реально работающих способов решения этой проблемы, переведенная на русский язык.

Итак, допустим мы зарегистрировали нашу кастономию (кастомную таксономию) и привязали ее к существующему типу (post type). О том как это сделать подробно описано в Кодексе WordPress. Воспользовавшись полезной схемой для разработки шаблонов для WordPress создаем файл в корне нашего шаблона с именем taxonomy-{имя_таксономии}.php. Пусть нашу таксономию зовут city. Тогда файл получится с именем taxonomy-city.php. Таким образом мы создали файл шаблона, который будет использоваться для отображения списка постов (или других типов записей) к которым относится данная таксономия.

Я не буду подробно описывать какой код должен быть в этом файле, рассчитывая на то, что все в курсе, так как дочитали до этого момента. Если нет, то рекомендую ознакомиться с таким понятием как WordPress Цикл (The Loop).

Решение

Возможно, у вас не возникнет ошибки 404, о которой я говорю. Но это лишь в том случае если вам не понадобиться изменить количество постов на страницу. За это отвечает параметр posts_per_page.

Итак, правильный способ изменения параметра posts_per_page для архивных страниц таксономии city:

function tax_city_posts_per_page( $query ) {
    if( is_tax('city') ) {
        $query->set('posts_per_page', 5); //ваше значение
    }
    return $query;
}

И чтобы применить эту функцию добавим фильтр (подробнее о фильтрах):

add_filter('pre_get_posts', 'tax_city_posts_per_page');

Данный пример является очень частным случаем, но не сложно понять как сделать его более универсальным.