当前浏览:首页 / WordPress函数 / paginate_links()

paginate_links( string|array $args = '' )

检索存档文章页面的分页链接

linkmore...

paginate


描述

从技术上讲,该函数可用于为任何区域创建分页链接列表。“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) 附加在页码之后的字符串

默认值: ''


返回

(string|array|void) 页面链接字符串或页面链接数组,取决于“type”参数。如果总页数小于2,则无效。



源码

查看源码 官方文档


更新日志

版本描述
4.9.0添加了aria_current参数
2.1.0开始引入

使用示例

  • 示例1

    使用自定义查询的例子
    当用新的 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
    ) );
    ?>
    
  • 示例2

    改善可访问性
    为编号的链接添加上下文,以确保屏幕阅读器用户了解链接的用途:

    <?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>'
    ) );
    ?>
    
  • 示例3

    注意,base参数应该是完全限定的,例如https://example.com/my-post/%_%#some-id,而不仅仅是%_%#some-id

    如果base参数不包含绝对URL,那么当您在第二个页面上时,到第一个页面的链接将不起作用;相反,它将链接到当前页面。这是因为“Previous”链接设置为base参数,删除了%_%部分,没有添加额外的?paged=%#%部分。然后,浏览器将其解释为当前页面,因此“上一个”链接指向当前页面。

  • 示例4

    您可能会注意到,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>
  • 示例5

    基本示例
    要将分页添加到搜索结果和存档中,可以使用以下示例:

    <?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
    ) );
    ?>
    
  • 示例6
    // 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
    
  • 示例7
    <?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正确对齐数组项。