Исправление ошибки 404 при пагинации произвольного типа записей
Пытаюсь решить эту проблему весь день, но пока безуспешно...
У меня есть произвольный тип записей 'news' и шаблон архива (archive-news.php), где я хочу показывать 2 записи с пагинацией. Это работает нормально до тех пор, пока я не пытаюсь перейти на "следующую страницу" (/news/page/2), которая возвращает ошибку 404.
Есть ли идеи, как это исправить / что я делаю неправильно?
Я буквально провел весь день в поисках решения, просматривая Google и форумы WordPress. Нашел много решений, но ни одно из них пока не сработало.
Моя функция регистрации произвольного типа записей: http://pastebin.com/uG1L6YNu
Мои правила перезаписи: http://pastebin.com/jbaDANYr

Теперь это работает для меня... для тех, у кого такая же проблема, оказывается, весь код был правильным.
Проблема заключалась в том, что WordPress по умолчанию настроен на отображение 10 записей на странице, что конфликтовало с моим запросом (ограничивающим вывод до 2 записей). Чтобы исправить это, я изменил настройку WordPress (Настройки / Чтение в админ-панели) на 1.

Эта проблема возникает постоянно. По моему мнению, пользовательские типы записей — это не обычные записи, поэтому для каждого типа записей должен быть отдельный параметр запроса posts_per_page. В любом случае, вот ответ, который показывает, как изменить значение posts_per_page на лету, не затрагивая настройки в админке: http://wordpress.stackexchange.com/questions/30757/change-posts-per-page-count/30763#30763

Вопрос от goto10 работает отлично, и это лучше, если вы всё ещё хотите использовать настройку posts per page для других страниц. Мне всё ещё интересно, почему это происходит — впервые столкнулся с такой ситуацией. Раньше я мог использовать posts_per_page
как обычно, без конфликтов с настройками WordPress.

Огромное спасибо за эту информацию! Я уже голову ломал, разбираясь с правилами перезаписи и всем прочим, а оказывается, проблема в этом.

Я нашел решение здесь: http://walrusinacanoe.com/web-development/742
Оно элегантное и функциональное:
add_action( 'parse_query','changept' );
function changept() {
if( is_category() && !is_admin() )
set_query_var( 'post_type', array( 'post', 'your_custom_type' ) );
return;
}

Это действительно сработало для меня. Другое решение (WP-Admin / Настройки / Чтение / 1) вообще не помогло.
Спасибо за это! (часы потрачены на отладку и поиски)

Попробуйте этот вариант:
// Добавляем действие для изменения запроса перед получением постов
add_action('pre_get_posts','custom_pre_get_posts');
function custom_pre_get_posts( $query )
{
// Проверяем, что это основной запрос, не RSS-лента и не админка
if( $query->is_main_query() && !$query->is_feed() && !is_admin()) {
// Устанавливаем номер страницы, удаляя слэши из параметра page
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );
}
}
// Добавляем фильтр для модификации строки запроса
add_filter('request', 'custom_request');
function custom_request($query_string )
{
// Если есть параметр page в запросе
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
// Удаляем параметр name, если он есть
if( isset( $query_string['name'] ) ) {
unset( $query_string['name'] );
}
}
}
return $query_string;
}
