Почему "/page/2/" не работает?

6 мар. 2012 г., 01:30:06
Просмотры: 66.5K
Голосов: 15

Наконец удалось настроить пагинацию с помощью кода ниже, но теперь ссылки пагинации ведут на /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();
 ?>
2
Комментарии

Я не рекомендую переопределять основной запрос таким образом. Вы рассматривали возможность использования pre_get_posts? Тогда вы сможете использовать встроенный код пагинации вместо написания собственного, а также упростите до стандартного цикла записей

Tom J Nowell Tom J Nowell
7 февр. 2016 г. 15:32:27

Кроме того, WordPress предоставляет стандартную страницу архива для типов записей, поэтому у вас уже должен быть архив записей по адресу /videos/, который будет загружать archive-videos.php, и для этого не требуется никаких манипуляций с запросами

Tom J Nowell Tom J Nowell
7 февр. 2016 г. 15:33:26
Все ответы на вопрос 5
4
21

Нашел ответ:

После долгого дня отладки ядра WordPress, мне удалось решить эту проблему.

По сути, вы НЕ МОЖЕТЕ иметь СТРАНИЦУ и ПОЛЬЗОВАТЕЛЬСКИЙ ТИП ЗАПИСИ с одинаковым названием. Если это сделать, правила перезаписи постоянных ссылок запутаются и вызовут ошибку 404.

Очень простое решение, которое я использую: страница, которая выводит список пользовательских типов записей, называется во множественном числе (например, products), а сам тип записи — в единственном (например, product). Таким образом, они не конфликтуют, и все работает правильно.

Готово! Надеюсь, это сэкономит чье-то время.

6 мар. 2012 г. 01:53:39
Комментарии

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

Rutwick Gangurde Rutwick Gangurde
6 мар. 2012 г. 05:53:05

Прошло 9 лет, а всё ещё актуально! Спасибо

Sid Sid
30 мар. 2021 г. 14:18:07

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

Jamie Hutber Jamie Hutber
17 сент. 2021 г. 02:31:53

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

jnthnclrk jnthnclrk
7 нояб. 2023 г. 01:37:01
0

После долгого времени я нашел решение этой проблемы (спасибо 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; 
}

Теперь всё работает отлично!

7 февр. 2016 г. 15:16:17
0

нельзя иметь СТРАНИЦУ и ПРОИЗВОЛЬНЫЙ ТИП ЗАПИСИ с одинаковым именем

Возможно три года назад это было невозможно, но сейчас МОЖНО.

Во-первых, добавьте эти строки в $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);
}

Не забудьте сбросить правила перезаписи в админке.

30 июл. 2015 г. 15:34:09
1

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

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

23 мая 2021 г. 19:16:18
Комментарии

Спасибо! Я потратил так много времени, пытаясь понять, в чем проблема

probablybest probablybest
3 мая 2023 г. 17:33:00
0

После долгой отладки я наконец нашел решение проблемы с пагинацией

По сути, в WordPress нельзя иметь СТРАНИЦУ и ПРОИЗВОЛЬНЫЙ ТИП ЗАПИСЕЙ с одинаковым названием. Если это сделать, правила перезаписи постоянных ссылок запутаются и вызовут ошибку 404.

22 сент. 2020 г. 18:45:26