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_textstringScreen reader text for navigation element.
Default ‘Posts pagination’.aria_labelstringARIA label text for the nav element. Default ‘Posts pagination’.classstringCustom class for the nav element. Default'pagination'.
More Arguments from paginate_links( … $args )
Array or string of arguments for generating paginated links for archives.
basestringBase of the paginated url. Default empty.formatstringFormat for the pagination structure. Default empty.totalintThe total amount of pages. Default is the value WP_Query‘smax_num_pagesor 1.currentintThe current page number. Default is'paged'query var or 1.aria_currentstringThe value for the aria-current attribute. Possible values are'page','step','location','date','time','true','false'. Default is'page'.show_allboolWhether to show all pages. Default false.end_sizeintHow many numbers on either the start and the end list edges.
Default 1.mid_sizeintHow many numbers to either side of the current pages. Default 2.prev_nextboolWhether to include the previous and next links in the list. Default true.prev_textstringThe previous page text. Default ‘« Previous’.next_textstringThe next page text. Default ‘Next »’.typestringControls format of the returned value. Possible values are'plain','array'and'list'. Default is'plain'.add_argsarrayAn array of query args to add. Default false.add_fragmentstringA string to append to each link. Default empty.before_page_numberstringA string to appear before the page number. Default empty.after_page_numberstringA string to append after the page number. Default empty.
Default:
array()
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.
Skip to note 3 content
Nilo Velez
$argsparam 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' => '' ); ?>Skip to note 4 content
Mizner
// Usage Example $pagination = get_the_posts_pagination( array( 'mid_size' => 2, 'prev_text' => __( 'Newer', 'textdomain' ), 'next_text' => __( 'Older', 'textdomain' ), ) );