函数文档

get_the_posts_pagination()

💡 云策文档标注

概述

get_the_posts_pagination() 函数用于在适用时检索文章分页导航的 HTML 标记。它基于 WP_Query 的 max_num_pages 判断是否需要分页,并调用 paginate_links() 生成链接。

关键要点

  • 函数返回分页链接的 HTML 字符串,当只有一页时返回空字符串。
  • 参数 $args 可选,可覆盖默认分页设置,包括屏幕阅读器文本、ARIA 标签、CSS 类等。
  • 内部使用 paginate_links() 生成链接,并支持通过 the_posts_pagination_args 过滤器修改参数。
  • 默认参数包括 mid_size=1、prev_text='Previous'、next_text='Next'、screen_reader_text='Posts pagination' 等。
  • 如果 $args['type'] 设置为 'array',函数会自动转换为 'plain' 以确保返回字符串。

代码示例

// Usage Example
$pagination = get_the_posts_pagination( array(
    'mid_size' => 2,
    'prev_text' => __( 'Newer', 'textdomain' ),
    'next_text' => __( 'Older', 'textdomain' ),
) );

注意事项

  • 函数依赖于全局 $wp_query 对象,确保在正确的查询上下文中使用。
  • 参数 $args 可以传递 paginate_links() 支持的所有选项,如 base、format、total 等。
  • 从 WordPress 5.5.0 开始添加了 class 参数,5.3.0 添加了 aria_label 参数。

📄 原文内容

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

Parameters

$argsarrayoptional
Default pagination arguments, see paginate_links() .

  • screen_reader_text string
    Screen reader text for navigation element.
    Default ‘Posts pagination’.
  • aria_label string
    ARIA label text for the nav element. Default ‘Posts pagination’.
  • class string
    Custom class for the nav element. Default 'pagination'.

More Arguments from paginate_links( … $args )

Array or string of arguments for generating paginated links for archives.

  • base string
    Base of the paginated url. Default empty.
  • format string
    Format for the pagination structure. Default empty.
  • total int
    The total amount of pages. Default is the value WP_Query‘s max_num_pages or 1.
  • current int
    The current page number. Default is 'paged' query var or 1.
  • aria_current string
    The value for the aria-current attribute. Possible values are 'page', 'step', 'location', 'date', 'time', 'true', 'false'. Default is 'page'.
  • show_all bool
    Whether to show all pages. Default false.
  • end_size int
    How many numbers on either the start and the end list edges.
    Default 1.
  • mid_size int
    How many numbers to either side of the current pages. Default 2.
  • prev_next bool
    Whether to include the previous and next links in the list. Default true.
  • prev_text string
    The previous page text. Default ‘« Previous’.
  • next_text string
    The next page text. Default ‘Next »’.
  • type string
    Controls format of the returned value. Possible values are 'plain', 'array' and 'list'. Default is 'plain'.
  • add_args array
    An array of query args to add. Default false.
  • add_fragment string
    A string to append to each link. Default empty.
  • before_page_number string
    A string to appear before the page number. Default empty.
  • after_page_number string
    A string to append after the page number. Default empty.

Default:array()

Return

string Markup for pagination links.

Source

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 pagination' ),
				'aria_label'         => __( 'Posts pagination' ),
				'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;
}

Hooks

apply_filters( ‘the_posts_pagination_args’, array $args )

Filters the arguments for posts pagination links.

Changelog

Version Description
5.5.0 Added the class parameter.
5.3.0 Added the aria_label parameter.
4.1.0 Introduced.

User Contributed Notes

  1. Skip to note 3 content

    $args param is passed to the paginate_links() function.

    Default values:

     '%_%',
    	'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'  => ''
    ); ?>