Почему "/страница/2/" не работает?
Наконец-то появилась разбивка на страницы для работы с приведенным ниже кодом, но теперь разбивка на страницы ссылается на /видео/страницу/2/, которой не существует. Как мне заставить страницу 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();
//display stuff
endwhile;
php wp_pagenavi();
?>
4 answers
Нашел ответ:
После долгого дня отладки через ядро wordpress мне удалось решить эту проблему.
В основном, у вас НЕ МОЖЕТ быть СТРАНИЦЫ и ПОЛЬЗОВАТЕЛЬСКОГО ТИПА ЗАПИСИ с одинаковым именем. Если вы это сделаете, правила перезаписи постоянных ссылок будут сбиты с толку и вызовут 404.
Я использую очень простое решение: страница, на которой перечислены пользовательские типы записей, называется во множественном числе (например, продукты), а фактическое имя типа записи указано в единственном числе (например, продукт). Так они не конфликтуют, и все в порядке.
Сделано, сделано! Надеюсь, это сэкономит людям время.
Спустя долгое время я нашел решение этой проблемы (благодаря 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' => 'your slug', // if you need 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);
}
Не забудьте удалить правила в панели мониторинга.
После долгой отладки даже я получил решение проблемы с разбиением на страницы
В принципе, в WordPress у вас не может быть СТРАНИЦЫ и ПОЛЬЗОВАТЕЛЬСКОГО ТИПА ЗАПИСИ с одинаковым именем. Если вы это сделаете, правила перезаписи постоянных ссылок будут сбиты с толку и вызовут 404.