Архивная страница... ограничение постов на странице

17 мар. 2015 г., 22:31:26
Просмотры: 20.9K
Голосов: 4

Итак, я создал пользовательский тип записей 'testimonials', установил опцию "has archive" в "true" и создал PHP шаблон с именем "archive-testimonials.php".

Я хочу ограничить количество отображаемых постов до 5 с возможностью переключения вперед и назад для просмотра следующих 5 постов. Звучит достаточно просто, но почему-то у меня не получается это реализовать.

Вот мой цикл, который показывает все 17 отзывов:

<?php $loop = new WP_Query( array( 'pagename' => 'testimonials', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
   </div>
 <?php endwhile; ?>

Единственный способ показать их все вместо только 10 - это использовать 'posts_per_page' => -1. И даже без этого параметра "posts_per_page" он показывает только 10 из 17 постов.

Теперь я попробовал:

<?php $loop = new WP_Query( array( 'post_type' => 'testimonials', 'posts_per_page' => 5 ) ); ?>
<?php previous_posts_link(); ?> &bull; <?php next_posts_link(); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
     <?php the_content(); ?>
  </div>
<?php endwhile; ?>

Мне удается показать только пять записей, но у меня нет пагинации для перехода к следующим 5. При открытии "testimonials/page/2/" показываются те же пять записей, что и на предыдущей странице.

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

Спасибо

0
Все ответы на вопрос 1
1
19

Не создавайте новый запрос и цикл только для изменения количества записей на странице. Добавьте функцию, привязанную к pre_get_posts, и измените нужные параметры до выполнения запроса. Этот код следует разместить в файле functions.php вашей темы или в плагине.

function wpd_testimonials_query( $query ){
    if( ! is_admin()
        && $query->is_post_type_archive( 'testimonials' )
        && $query->is_main_query() ){
            $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'wpd_testimonials_query' );

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

17 мар. 2015 г. 22:54:28
Комментарии

Это сработало идеально. Я не новичок в WordPress, но мне далеко до продвинутых пользователей. Вчера я бился над этой проблемой и никак не мог заставить это работать. Но сегодня я узнал что-то новое... Спасибо, что научили меня.

agon024 agon024
18 мар. 2015 г. 16:14:52