Почему "/page/2/" не работает?
Наконец удалось настроить пагинацию с помощью кода ниже, но теперь ссылки пагинации ведут на /videos/page/2/, которая не существует. Как сделать так, чтобы вторая страница работала?
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
//вывод содержимого
endwhile;
php wp_pagenavi();
?>

Нашел ответ:
После долгого дня отладки ядра WordPress, мне удалось решить эту проблему.
По сути, вы НЕ МОЖЕТЕ иметь СТРАНИЦУ и ПОЛЬЗОВАТЕЛЬСКИЙ ТИП ЗАПИСИ с одинаковым названием. Если это сделать, правила перезаписи постоянных ссылок запутаются и вызовут ошибку 404.
Очень простое решение, которое я использую: страница, которая выводит список пользовательских типов записей, называется во множественном числе (например, products), а сам тип записи — в единственном (например, product). Таким образом, они не конфликтуют, и все работает правильно.
Готово! Надеюсь, это сэкономит чье-то время.

Полагаю, это касается не только произвольных записей, но и обычных записей и страниц с одинаковым названием.

Я не совсем понимаю, что это значит... Но я знаю, что это решение!

Этот пост помог мне. Не уверен, что это точно такая же проблема, но переименование моей страницы с search/ на search-2 исправило аналогичную проблему с пагинацией. Полагаю, у меня есть конфликт в моей теме по слагу search/. Может кто-нибудь подсказать, как это подтвердить? Не могу найти никаких упоминаний "search" в wp_posts - post_name.

После долгого времени я нашел решение этой проблемы (спасибо franzblog).
Если вы используете версию 4.2 или выше, вам нужно добавить следующие строки в файл functions.php
:
add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
if ( is_paged() && is_singular() ) $redirect_url = false;
return $redirect_url;
}
Теперь всё работает отлично!

нельзя иметь СТРАНИЦУ и ПРОИЗВОЛЬНЫЙ ТИП ЗАПИСИ с одинаковым именем
Возможно три года назад это было невозможно, но сейчас МОЖНО.
Во-первых, добавьте эти строки в $args
вашего типа записи:
'has_archive' => false,
'rewrite' => array(
'slug' => 'ваш слаг', // если вам нужен слаг
'with_front' => false,
),
Во-вторых, в functions.php
добавьте действие:
add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
global $wp_post_types;
foreach ($wp_post_types as $wp_post_type) {
if ($wp_post_type->_builtin) continue;
if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
$slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
$page = get_page_by_slug($slug);
if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
}
}
}
function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
global $wpdb;
$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );
return ($page ? get_post($page, $output) : NULL);
}
Не забудьте сбросить правила перезаписи в админке.

Одна из возможных причин заключается в том, что в админ-панели Настройки -> Чтение
, если вы выбрали Страницу записей
, опция На страницах блога отображать не более
может конфликтовать с вашим кастомным запросом posts_per_page
на этой странице.
Поэтому убедитесь, что либо вы сняли выбор страницы записей, либо установили количество записей на странице, соответствующее опции На страницах блога отображать не более
в Настройки -> Чтение
.
