WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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

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

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

Пример кода

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

// 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_engineer
8.5 лет назад 2
  • 0
    Kama9619

    Базовая функция работает на основе глобальной $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 8.5 лет назад

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

    Dmtry44 7.1 год назад

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

    Kama 7.1 год назад

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

    Элчин 5.9 лет назад

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

    Kama 5.9 лет назад

    Код покажи, по идее должна работать пага.

    firewaters 5.9 лет назад

    Вот код, проблема та же... меняется url - но посты остаются теми же..

    <?php
    	$args = array(
    		'numberposts' => 0,
    		'category_name'    => $cat_slug,
    		'orderby'     => 'parent',
    		'order'       => 'DESC',
    		'include'     => array(),
    		'exclude'     => array(),
    		'meta_key'    => '',
    		'meta_value'  =>'',
    		'post_type'   => 'post',
    		'child_of='   =>'',
    		'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
    	);
    	global $wp_query;
    
    	$save_wpq = $wp_query;
    
    	// ваш запрос и код вывода с пагинацией
    	$wp_query = new WP_Query( $args );
    	while ( $wp_query->have_posts() ) {
    		$wp_query->the_post();
    
    		//  ваш вывод
    		echo '<h1>'. the_title() .'</h1>';
    	}                                       
    
    	// пагинация
    	wp_pagenavi();
    	// вернем global $wp_query
    	wp_reset_postdata();
    	$wp_query = $save_wpq;
    ?>
    Kama 5.9 лет назад

    Ну так ты в запрос то передавай страницу пагинации... Параметр paged в него укажи get_query_var('paged') или в какой переменной там у тебя номер стр пагинации лежит..

    П.С. ну вы ребята даете конечно... Ну как же так? Функция - это же не чудеса, ну элементарная же логика, что спросил то и отдает и если ты не спрашиваешь посты со страницы 2, то как же потом можно ждать что вернутся посты со страницы 2?

    Комментировать
  • 0

    Нашел на просторах интернета

    Ниже приведена базовая конструкция цикла пользовательского запроса с правильно работающими функциями пагинации:

    // Define custom query parameters
    $custom_query_args = array( /* Parameters go here */ );
    
    // Get current page and append to custom query parameters array
    $custom_query_args['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    
    // Instantiate custom query
    $custom_query = new WP_Query( $custom_query_args );
    
    // Pagination fix
    $temp_query = $wp_query;
    $wp_query   = NULL;
    $wp_query   = $custom_query;
    
    // Output custom query loop
    if ( $custom_query->have_posts() ) :
    	while ( $custom_query->have_posts() ) :
    		$custom_query->the_post();
    		// Loop output goes here
    	endwhile;
    endif;
    // Reset postdata
    wp_reset_postdata();
    
    // Custom query loop pagination
    previous_posts_link( 'Older Posts' );
    next_posts_link( 'Newer Posts', $custom_query->max_num_pages );
    
    // Reset main query object
    $wp_query = NULL;
    $wp_query = $temp_query;
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация