WordPress как на ладони
wordpress jino

Как подключить пагинацию используя функцию get_posts() ?

Очень удобная функция, но не удается заставить работать штатную пагинацию. Поиск в инете выдает рекомендацию использовать вместо нее WP_Query.

Но можно ли как-то подключить пагинацию именно к get_posts()

Пример кода

<?php
// begin ПАРАМЕТРЫ цикла (см. get_post)
$args = array(
'posts_per_page' => 1,
'category' => '2',
'post_type' => 'post',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
);
$postslist = get_posts( $args );

// end ПАРАМЕТРЫ цикла (см. get_post) ?>
<!-- Цикл (Loop) BEGIN -->
<?php foreach ($postslist as $post) : setup_postdata($post); ?>
<!-- Вид каждой записи - BEGIN -->

<!-- Выводим заголовок поста, как ссылку на сам пост. -->
<h2><a href="<?php the_permalink() ?>" title="Ссылка на: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>

<!-- миниатюра -->
<p>
<?php the_post_thumbnail(array(200, 200)); //миниатюра-иконка c размером>
</p>

<!-- Выводим цитату поста в теге div. -->
<div class="entry">
<?php the_excerpt(); ?>
</div>

<!-- Выводим ссылку Читать далее -->
<a href="<?php the_permalink(); ?>" rel="bookmark" class="entry-link">Читать далее</a>

<!-- Вид каждой записи - END -->

<?php endforeach; ?>
<?php wp_reset_postdata() ?>
<!-- Цикл (Loop) END -->
<!-- постраничная навигация BEGIN-->
<?php //wplift_pagination(); ?>
<div class="nav-previous alignleft"><?php //next_posts_link( 'Предидущие записи' ); ?></div>
<div class="nav-next alignright"><?php //previous_posts_link( 'Следующие записи' ); ?></div>
<?php the_posts_pagination(); ?>
<?php //the_posts_navigation(); ?>
<!-- постраничная навигация END-->
1
wp_engineer2 2.1 года назад
  • 0
    Kama4697

    Базовая функция работает на основе глобальной $wp_query. Попробуйте использовать WP_Query вместо get_posts(). И запишите результат в глобальную $wp_query. Но предварительно сохраните $wp_query, а после кода верните её в прежнее состояние...

    1 вариант:

    global $wp_query;
    
    $save_wpq = $wp_query;
    
    // ваш запрос и код вывода с пагинацией
    $wp_query = new WP_Query( $args );
    while ( $wp_query->have_posts() ) {
    	$wp_query->the_post();
    
    	//  ваш вывод
    }
    
    // пагинация
    
    // вернем global $wp_query
    wp_reset_postdata();
    $wp_query = $save_wpq;

    2 вариант:

    Если первый вариант не сработает, попробуйте сделать все это с помощью query_posts():

    query_posts( $args );
    while ( have_posts() ) {
    	the_post();
    
    	//  ваш вывод
    }
    
    // пагинация
    
    // вернем global $wp_query
    wp_reset_query();

    П.С. Также для понимания проблемы вам могут пригодиться эти статьи:

    wp_engineer 2.1 года назад

    Спасибо за содержательный ответ. Попробую.

    Dmtry44 10 месяцев назад

    А какой вариант из двух предпочтительнее использовать, первый?

    Kama 10 месяцев назад

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

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.