描述
从技术上讲,该函数可用于为任何区域创建分页链接列表。“base”参数用于引用url,url将用于创建分页链接。然后使用“format”参数替换页码。然而,在默认情况下,它很可能用于存档文章页面。
“type”参数控制返回值的格式。默认值为“plain”,它只是一个由换行符分隔的链接字符串。其他可能的值为“array”或“list”。“array”值将返回分页链接列表的数组,以提供对显示的完全控制。“list”值将把所有分页的链接放在无序的HTML列表中。
“total”参数是总页数,是一个整数。“current”参数是当前页码,也是一个整数。
“base”参数的一个示例是“http://example.com/all_posts.php%_%”,‘%_%’是必须的。‘%_%’将替换为“format”参数中的内容。“format”参数的示例是“?page=%#%”,“%#%”是必须的。“%#%”将替换为页码。
通过将“prev_next”参数设置为true(默认设置),可以在列表中包含上一个和下一个链接。您可以使用“prev_text”参数设置上一个文本。您可以通过设置“next_text”参数来设置下一个文本。
如果“show_all”参数设置为true,则它将显示所有页面,而不是当前页面附近的页面短列表。默认情况下,“show_all”设置为false,并由“end_size”和“mid_size”参数控制。“end_size”参数是开始和结束列表边缘上的数字数量,默认情况下为1。“mid_size”参数是指当前页面两侧有多少个数字,但不包括当前页面。
可以通过使用 ‘add_args’ 参数向链接添加查询变量,更多信息见 add_query_arg()。
“before_page_number”和“after_page_number”参数允许用户自己增加链接。通常,这可能是向编号的链接添加上下文,以便屏幕阅读器用户了解链接的用途。文本字符串添加在页码之前和之后–在锚定标记内。
参数
- $args
-
(string|array) (可选) 用于为存档生成分页链接的参数数组或字符串。
- 'base'
(string) 分页url的基础 - 'format'
(string) 分页结构的格式 - 'total'
(int) 总页数,默认是 WP_Query 的值max_num_pages
或 1 - 'current'
(int) 当前页码,默认是 'paged' 查询变量 或 1 - 'aria_current'
(string) aria-current 属性的值,可能的值是:'page'、'step'、'location'、'date'、'time'、'true'、'false',默认是 'page' - 'show_all'
(bool) 是否显示所有分页,默认 false - 'end_size'
(int) 在开始和结束列表的边缘有多少个数字,默认 1 - 'mid_size'
(int) 当前页的两侧有多少个数字,默认 2 - 'prev_next'
(bool) 是否在列表中包含上一页和下一页链接,默认 true - 'prev_text'
(bool) 上一页文本,默认 '« Previous' - 'next_text'
(bool) 下一页文本,默认 'Next »' - 'type'
(string) 控制返回值的格式,可能的值是:'plain'、'array' 和 'list',默认是 'plain' - 'add_args'
(array) 要添加的查询参数数组,默认 false - 'add_fragment'
(string) 一个字符串,附加到每个链接上 - 'before_page_number'
(string) 出现在页码前的一个字符串 - 'after_page_number'
(string) 附加在页码之后的字符串
默认值: ''
- 'base'
返回
(string|array|void) 页面链接字符串或页面链接数组,取决于“type”参数。如果总页数小于2,则无效。
源码
更新日志
版本 | 描述 |
---|---|
4.9.0 | 添加了aria_current 参数 |
2.1.0 | 开始引入 |
使用示例
使用自定义查询的例子
当用新的 WP_Query 查询一个循环时,将total
参数设置为 WP_Query 对象的max_num_pages
属性。自定义查询示例:
<?php //Protect against arbitrary paged values $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $args = array( 'posts_per_page' => 5, 'category_name' => 'gallery', 'paged' => $paged, ); $the_query = new WP_Query( $args ); ?> <!-- the loop etc.. -->
适用于上述自定义查询的
paginate_links
参数示例:<?php $big = 999999999; // need an unlikely integer echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $the_query->max_num_pages ) ); ?>
改善可访问性
为编号的链接添加上下文,以确保屏幕阅读器用户了解链接的用途:<?php global $wp_query; $big = 999999999; // need an unlikely integer $translated = __( 'Page', 'mytextdomain' ); // Supply translatable string echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>' ) ); ?>
注意,
base
参数应该是完全限定的,例如https://example.com/my-post/%_%#some-id
,而不仅仅是%_%#some-id
。如果
base
参数不包含绝对URL,那么当您在第二个页面上时,到第一个页面的链接将不起作用;相反,它将链接到当前页面。这是因为“Previous”链接设置为base
参数,删除了%_%
部分,没有添加额外的?paged=%#%
部分。然后,浏览器将其解释为当前页面,因此“上一个”链接指向当前页面。您可能会注意到,
paginate_links
总是返回HTML,即使您将type
设置为array,这使得您想要完全定制分页的HTML结构有点困难。我编写了一个小函数,它将返回一个对象数组,而不是HTML,这可能会使这变得更容易。function wpdocs_get_paginated_links( $query ) { // When we're on page 1, 'paged' is 0, but we're counting from 1, // so we're using max() to get 1 instead of 0 $currentPage = max( 1, get_query_var( 'paged', 1 ) ); // This creates an array with all available page numbers, if there // is only *one* page, max_num_pages will return 0, so here we also // use the max() function to make sure we'll always get 1 $pages = range( 1, max( 1, $query->max_num_pages ) ); // Now, map over $pages and return the page number, the url to that // page and a boolean indicating whether that number is the current page return array_map( function( $page ) use ( $currentPage ) { return ( object ) array( "isCurrent" => $page == $currentPage, "page" => $page, "url" => get_pagenum_link( $page ) ); }, $pages ); }
然后这样使用它(假设
$query
是自定义查询的名称):<ul> <?php foreach( wpdocs_get_paginated_links( $query ) as $link ) : ?> <li> <?php if ( $link->isCurrent ): ?> <strong><?php _e( $link->page ) ?></strong> <?php else : ?> <a href="<?php esc_attr_e( $link->url ) ?>"> <?php _e( $link->page ) ?> </a> <?php endif; ?> </li> <?php endforeach; ?> </ul>
基本示例
要将分页添加到搜索结果和存档中,可以使用以下示例:<?php global $wp_query; $big = 999999999; // need an unlikely integer echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages ) ); ?>
// first create a function function pagainate_link_function(){ global $wp_query; echo paginate_links(array( 'current'=>max(1,get_query_var('paged')), 'total'=>$wp_query->max_num_pages, 'type'=>'list', //default it will return anchor )); } // Now call this function in your desired place
<?php global $wp_query; $big = 999999999; // need an unlikely integer echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages ) ); ?>
根据WPC正确对齐数组项。