Wordpress Pagination не работает - Всегда показывает содержимое первой страницы
Я работаю над сайтом, где у меня есть блог, а также пользовательский тип записей для размещения видео.
Я хочу использовать пагинацию, чтобы при отображении более 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(); ?>
Буду признателен за любую помощь.
Почему ваш текущий код не работает
Вы всегда получаете содержимое первой страницы, потому что строка параметров, передаваемая в 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 'Извините, записи не найдены.';
}
?>

Большое спасибо за это, интересное чтение. Однако, не могли бы вы предоставить альтернативный вариант с использованием метода get_posts().
Действительно ли это так просто:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>
У меня это не работает, но возможно, проблема в другом коде?
