get_the_posts_pagination()WP 4.1.0

Retrieves a paginated navigation to next/previous set of posts, when applicable.

Hooks from the function

Return

String. Markup for pagination links.

Usage

get_the_posts_pagination( $args );
$args(array)

Optional.

Default: pagination arguments, see paginate_links()

  • screen_reader_text(string)
    Screen reader text for navigation element.
    Default: 'Posts navigation'

  • aria_label(string)
    ARIA label text for the nav element.
    Default: 'Posts'

  • class(string)
    Custom class for the nav element.
    Default: 'pagination'

Examples

0

#1 Output pagination links

Suppose we need to display pagination links to the sets of posts (/page/1, /page/2) on the archives page, use the following code:

<?php echo get_the_posts_pagination(); ?>

It displays:

<nav class="navigation pagination" role="navigation">
	<h2 class="screen-reader-text">Posts navigation</h2>
	<div class="nav-links"><span class="page-numbers current"><span class="meta-nav screen-reader-text">Page </span>1</span>
		<a class="page-numbers" href="http://example.com/page/2/"><span class="meta-nav screen-reader-text">Page </span>2</a>
		<span class="page-numbers dots">…</span>
		<a class="page-numbers" href="http://example.com/page/86/"><span class="meta-nav screen-reader-text">Page </span>86</a>
		<a class="page-numbers" href="http://example.com/page/87/"><span class="meta-nav screen-reader-text">Page </span>87</a>
		<a class="next page-numbers" href="http://example.com/page/2/">Next page</a>
	</div>
</nav>
0

#2 Usage Example

$pagination = get_the_posts_pagination( [
	'mid_size' => 2,
	'prev_text' => __( 'Newer', 'textdomain' ),
	'next_text' => __( 'Older', 'textdomain' ),
] );

$args param is passed to the paginate_links() function, so you can specify it's parameters too. Default values:

$args = array(
	'base'               => '%_%',
	'format'             => '?paged=%#%',
	'total'              => 1,
	'current'            => 0,
	'show_all'           => false,
	'end_size'           => 1,
	'mid_size'           => 2,
	'prev_next'          => true,
	'prev_text'          => __('« Previous'),
	'next_text'          => __('Next »'),
	'type'               => 'plain',
	'add_args'           => false,
	'add_fragment'       => '',
	'before_page_number' => '',
	'after_page_number'  => ''
);

$pagination = get_the_posts_pagination( $args );

Notes

  • Global. WP_Query. $wp_query WordPress Query object.

Changelog

Since 4.1.0 Introduced.
Since 5.3.0 Added the aria_label parameter.
Since 5.5.0 Added the class parameter.

get_the_posts_pagination() code WP 6.4.3

function get_the_posts_pagination( $args = array() ) {
	global $wp_query;

	$navigation = '';

	// Don't print empty markup if there's only one page.
	if ( $wp_query->max_num_pages > 1 ) {
		// Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
		if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
			$args['aria_label'] = $args['screen_reader_text'];
		}

		$args = wp_parse_args(
			$args,
			array(
				'mid_size'           => 1,
				'prev_text'          => _x( 'Previous', 'previous set of posts' ),
				'next_text'          => _x( 'Next', 'next set of posts' ),
				'screen_reader_text' => __( 'Posts navigation' ),
				'aria_label'         => __( 'Posts' ),
				'class'              => 'pagination',
			)
		);

		/**
		 * Filters the arguments for posts pagination links.
		 *
		 * @since 6.1.0
		 *
		 * @param array $args {
		 *     Optional. Default pagination arguments, see paginate_links().
		 *
		 *     @type string $screen_reader_text Screen reader text for navigation element.
		 *                                      Default 'Posts navigation'.
		 *     @type string $aria_label         ARIA label text for the nav element. Default 'Posts'.
		 *     @type string $class              Custom class for the nav element. Default 'pagination'.
		 * }
		 */
		$args = apply_filters( 'the_posts_pagination_args', $args );

		// Make sure we get a string back. Plain is the next best thing.
		if ( isset( $args['type'] ) && 'array' === $args['type'] ) {
			$args['type'] = 'plain';
		}

		// Set up paginated links.
		$links = paginate_links( $args );

		if ( $links ) {
			$navigation = _navigation_markup( $links, $args['class'], $args['screen_reader_text'], $args['aria_label'] );
		}
	}

	return $navigation;
}