WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com

the_posts_pagination() WP 4.1.0

Выводит на экран ссылки пагинации на след./пред. сет постов. Используется на страницах архивов (рубрики, метки, ...).

ссылки пагинации в теме Twenty Fifteen

Функция рассчитана на использования с любым типом записей.

Чтобы получить результат для обработки, используйте get_the_posts_pagination().

Работает на основе: get_the_posts_pagination()

Хуков нет.

Возвращает

Ничего. Выводит на экран HTML код пагинации. Если страниц пагинации нет (меньше 1), то ничего не выведет.

Использование

the_posts_pagination( $args );
$args(массив)

Параметры по которым будет выводиться результат. По умолчанию:

$args = array(
	'show_all'     => false, // показаны все страницы участвующие в пагинации
	'end_size'     => 1,     // количество страниц на концах
	'mid_size'     => 1,     // количество страниц вокруг текущей
	'prev_next'    => true,  // выводить ли боковые ссылки "предыдущая/следующая страница".
	'prev_text'    => __('« Previous'),
	'next_text'    => __('Next »'),
	'add_args'     => false, // Массив аргументов (переменных запроса), которые нужно добавить к ссылкам.
	'add_fragment' => '',     // Текст который добавиться ко всем ссылкам.
	'screen_reader_text' => __( 'Posts navigation' ),
);

$args передается в функцию paginate_links(), поэтому полный список параметров, смотрите в её описании.
По умолчанию: предустановки

Примеры

#1 Вывод пагинации на экран

<?php the_posts_pagination(); ?>

Выведет:

<nav class="navigation pagination" role="navigation">
	<h2 class="screen-reader-text">Навигация по записям</h2>
	<div class="nav-links"><span class="page-numbers current"><span class="meta-nav screen-reader-text">Страница </span>1</span>
		<a class="page-numbers" href="http://wptest.ru/page/2/"><span class="meta-nav screen-reader-text">Страница </span>2</a>
		<span class="page-numbers dots">…</span>
		<a class="page-numbers" href="http://wptest.ru/page/86/"><span class="meta-nav screen-reader-text">Страница </span>86</a>
		<a class="page-numbers" href="http://wptest.ru/page/87/"><span class="meta-nav screen-reader-text">Страница </span>87</a>
		<a class="next page-numbers" href="http://wptest.ru/page/2/">Следующая страница</a>
	</div>
</nav>

Ссылки пагинации в теме Twenty Fifteen

#2 Управление отображением

По умолчанию the_posts_pagination() выводит первую и последнюю страницу и по одной странице около текущей. Остальные заменяются многоточием. Этот вывод можно изменить с помощью аргументов:

show_all — показывать все страницы
end_size — количество страниц в начале и конце списка
mid_size — количество страниц слева и справа от текущей страницы

<?php 
the_posts_pagination( array(
	'mid_size' => 2,
) ); 
?>

Ссылки пагинации в теме Twenty Fifteen

#2.1 параметр end_size

Установим 2 ссылки на последние страницы в пагинации:

<?php 
the_posts_pagination( array(
	'end_size' => 2,
) ); 
?>

Ссылки пагинации в теме Twenty Fifteen

#3 Удаляем заголовок H2 из шаблона

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

С точки зрения SEO этот тег, вроде бы, лучше убрать. Сделать это можно с помощью фильтра navigation_markup_template:

// удаляет H2 из шаблона пагинации
add_filter('navigation_markup_template', 'my_navigation_template', 10, 2 );
function my_navigation_template( $template, $class ){
	/*
	Вид базового шаблона:
	<nav class="navigation %1$s" role="navigation">
		<h2 class="screen-reader-text">%2$s</h2>
		<div class="nav-links">%3$s</div>
	</nav>
	*/

	return '
	<nav class="navigation %1$s" role="navigation">
		<div class="nav-links">%3$s</div>
	</nav>    
	';
}

// выводим пагинацию
the_posts_pagination( array(
	'end_size' => 2,
) ); 

Код the_posts_pagination: wp-includes/link-template.php VER 5.0.1

<?php
function the_posts_pagination( $args = array() ) {
	echo get_the_posts_pagination( $args );
}

Cвязанные функции

Из метки: navigation pagination (навигация пагинация)

Еще из раздела: Архивы

37 комментов
Полезные 3 Вопросы 4 Все
  • Михаил

    Доброго времени суток! Такая проблема:
    Вывожу произвольный тип постов методом query_posts()
    Внизу подключаю ajax пагинацию, всё работает и на статических страницах, и в архивах.
    А на главной странице загружает точно такие же записи. Подскажите, пожалуйста, как можно исправить.
    Код:

     $args = array( 'post_type' => 'custom-type', 'posts_per_page' => 8, 'order' => 'DESC', 'page' => get_query_var('paged'), );
    		query_posts($args);
    		while ( have_posts() ) : the_post();
    
    			get_template_part( 'content-reading', get_post_format() );  
    
    	 endwhile; 
    		 echo ''; echo next_posts_link(__('Показать ещё')); echo '';
    	wp_reset_query();
    1
    Ответить1.5 года назад #
  • Сергей

    Не могу поставить навигацию на главную страницу блога
    В чем может быть проблема?

    3
    Ответить1.2 года назад #
    • У вас блог - какой тип записей? Страницы или посты?
      У меня со страницами не работает! Вы решили как-то проблему?

      Ответить6 мес назад #
  • Подскажите, можно ли сделать вывод разного количества постов на первой и остальных страницах?
    Вот у меня например есть страница категории товаров с сайдбаром и с длиннющим описанием, описание выводится только на первой странице - соответственно на остальных страницах у меня остается куча пустого места (т.к. сайдбар тоже большой, а количество товаров ограничено)

    Ответить1.1 года назад #
    • Kama7099

      Без костылей не сделаешь. Там придется пересчет пагинации для первой страницы делать, чтобы подходила под следующие и на следующих число страниц менять.

      Думаю, проще придумать другой подход. Например, сворачивать описание и разворачивать по клику на кнопку - кому надо кликнут прочитают...

      Ответить1.1 года назад #
  • Виталий

    Добрый день. Помогите решить проблему.Вывожу навигацию в категориях с помощью the_posts_pagination($args);
    В конце URL первой страницы появляется слеш. Как можно его убрать, чтобы избежать дублей страниц.
    Пробовал untrailingslashit не помогло.

    1
    Ответить9 мес назад #
  • Добрый день !

    Та же проблема со слешем

    Как убрть вывод слеша на конце адреса в пагинации ?

    На сайте прописан редирект со всех страниц со слешем "/" на конце на адреса без него.

    Проблема заключается в том, что когда находишься на второй, третей странице пагинации
    сайт.ру/название рубрики/page/3

    ссылка на первую страницу имеет слеш на конце

    сайт.ру/название рубрики/

    есть ли какое либо решение для вставки в functions.php ?

    Ответить8 мес назад #
    • @ campusboy3081 cайт: www.youtube.com/c/wpplus

      Привет. По ходу баг. Спасибо за репорт. Кинул тикет на трек.

      1
      Ответить7 мес назад #
    • @ Алексей

      У меня редирект со слеша на без слеша на конце. При выводе результатов фильтра по произвольным полям тоже не работала пагинация: к ссылке на первую страницу добавлялся слеш (https://site.ru/filter/?..., а должно было быть https://site.ru/filter?...) и в итоге выдавало 404 ошибку, причем только на 1-ю страницу. Помог вот такой вариант:

      <?
      the_posts_pagination(array(
      	'base'         => 'https://site.ru/filter%_%',
      	'format'       => '/page/%#%',
      	'prev_text'    => __('«'),
      	'next_text'    => __('»'),
      	'screen_reader_text' => __( '' ),
      	)
      ); 
      ?>
      1
      Ответить5 мес назад #
  • Кто сталкивался, подскажите если у меня выводится пагинация, но при переходе на новую следующую страницу остаются первые посты! помогите исправить пожалуйста help

    <?php
    	if (count(get_categories('child_of='.$cat))) 
    	if (is_category()) {
    	$current_cat=get_query_var('cat');
    
    	$args = array(
    		'type'   => 'post',
    		'show_option_all'    => '',
    		'show_option_none'   => __('No categories'),
    		'orderby'            => 'post_date',
    		'order'              => 'DESC',
    		'show_last_update'   => 0,
    		'style'              => 'list',
    		'show_count'         => 0,
    		'hide_empty'         => 0,
    		'use_desc_for_title' => 1,
    		'child_of'           => $current_cat,
    		'feed'               => '',
    		'feed_type'          => '',
    		'feed_image'         => '',
    		'exclude'            => '',
    		'exclude_tree'       => '',
    		'include'            => '',
    		'hierarchical'       => true,
    		'title_li'           => '',
    		'number'             => NULL,
    		'echo'               => 1,
    		'depth'              => 0,
    		'current_category'   => 0,
    		'pad_counts'         => 0,
    		'taxonomy'           => 'category',
    		'walker'             => 'Walker_Category',
    		'hide_title_if_empty' => false,
    		'separator'          => '<br />',
    	);
    
    ?>
    <?php
    
    	foreach (get_categories($args) as $category) {
    		$category_link = get_category_link( $category );
    			  ?>
    				<div class="col-md-6">
    					<div class="catalog-block">
    						<a href="<?php echo $category_link; ?>" class="catalog-title"><h3><?php echo $category->name; ?></h3></a>
    						<a href="<?php echo $category_link; ?>" class="catalog-title"><?php if($imgcat1=get_field("imgcat1",get_category($category))){?>
    							<img src="<?php echo $imgcat1;?>" style="max-height: 320px" />
    							<?php }?>
    						</a>
    						<a href="<?php echo $category_link; ?>" class="btn btn-tovar">Узнать подробнее о товаре</a>
    					</div>    
    				</div>                                    
    		<?php
    	}                       
    
    	//echo '<ul class="forchild">';
    		//wp_list_categories( $args );
    	//echo '</ul>';           
    	}
    	wp_reset_postdata(); // сброс
    ?>
    
    		<!-- Код для вывода постов в категории -->
    	<?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 запроса
    		);
    
    		$posts = get_posts( $args );
    		if ($categories == $current_cat or $category) { //если рубрики равняются текущей рубрике
    		foreach($posts as $post){ setup_postdata($post);
    			?>
    				<div class="col-md-6">
    					<div class="catalog-block">
    						<a href="<?php the_permalink(); ?>" class="catalog-title"><h3><?php the_title(); ?></h3></a>
    						<a href="<?php the_permalink(); ?>" class="catalog-title"><?php the_post_thumbnail('object-preview'); ?>
    						</a>
    						<a href="<?php the_permalink(); ?>" class="btn btn-tovar">Узнать подробнее о товаре</a>
    					</div>    
    				</div>
    			<?php
    			}                                       
    		}
    
    			the_posts_pagination();
    
    		wp_reset_postdata(); // сброс                       
    	?>
    Ответить7 мес назад #
  • Тимур привет!
    Подскажи, пожалуйста, как можно вывести пагинацию в Woo при выводе товаров со Скидкой через шорткод ([sale_products per_page=""])? scratch_one-s_head
    На данный момент, выводит все одной простыней, когда указываешь кол-во 20 ([sale_products per_page="20"]), выводит только 20, остальные товары обрезает и не выводит хотя их больше.

    Спасибо!

    1
    Ответить5 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться