Wordpress Pagination не работает - Всегда показывает содержимое первой страницы

10 июл. 2013 г., 16:28:36
Просмотры: 45.6K
Голосов: 10

Я работаю над сайтом, где у меня есть блог, а также пользовательский тип записей для размещения видео.

Я хочу использовать пагинацию, чтобы при отображении более 9 видео происходило разделение на страницы.

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

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

Для моих "обычных" записей блога пагинация работает именно так, как нужно.

Вот текущий код, который я использую для моего пользовательского типа записей:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Начало цикла */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Буду признателен за любую помощь.

1
Комментарии

возможный дубликат Как исправить пагинацию для пользовательских циклов?

Chip Bennett Chip Bennett
31 окт. 2013 г. 16:36:09
Все ответы на вопрос 1
3
18

Почему ваш текущий код не работает

Вы всегда получаете содержимое первой страницы, потому что строка параметров, передаваемая в query_posts, заключена в одинарные кавычки, что предотвращает раскрытие переменных (а также экранирующих последовательностей для специальных символов, кроме $).

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); решило бы эту проблему.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); тоже решило бы.

И, наконец, передача массива смешанных аргументов вместо строки в стиле URL-запроса также решила бы проблему.

Однако, как уже было сказано, вообще не следует использовать query_posts:

Как это следует делать правильно

Согласно вашему комментарию, вы пытались использовать get_posts.
Это действительно очень полезная функция, но не правильный подход, если вы хотите использовать после этого Цикл WordPress. get_posts возвращает массив объектов записей — свойство posts объекта WP_Query. Но только это свойство, без всех остальных полезных возможностей и методов, которые предоставляет WP_Query.

Таким образом, чтобы исправить ваш фрагмент кода, сделайте что-то вроде этого:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* Цикл */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // делаем что-то
        }
    } else {
        echo 'Извините, записи не найдены.';
    }
?>
10 июл. 2013 г. 16:36:43
Комментарии

Большое спасибо за это, интересное чтение. Однако, не могли бы вы предоставить альтернативный вариант с использованием метода get_posts().

Действительно ли это так просто:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>

У меня это не работает, но возможно, проблема в другом коде?

Johnny Johnny
10 июл. 2013 г. 17:13:21

Смотрите обновленный ответ.

Johannes Pille Johannes Pille
10 июл. 2013 г. 18:58:12

Большое спасибо, что нашли время показать мне, как это использовать. Я очень ценю это.

Johnny Johnny
11 июл. 2013 г. 00:35:33