如何在Wordpress分页中显示帖子范围而不是页码


How to display post ranges instead of page numbers in Wordpress pagination?

如何输出每个分页步骤中包含的帖子范围,而不仅仅是当前页码?

我的意思是:1-10-11 -20 21-30 31-40…101 - 110年的下一个

代替:1 2 3 4 5 6…接下来10

我的当前分页功能:

function wp_pagination() {
    global $wp_query;
    $total = $wp_query->max_num_pages;
    $prev_arrow = is_rtl() ? '<span class="next">Next</i>' : '<span class="previous">Prev</span >';
    $next_arrow = is_rtl() ? '<span class="previous">Prev</i>' : '<span class="next">Next</span >';
    $big = 999999999; 
    if( $total > 1 )  {
         if( !$current_page = get_query_var('paged') )
             $current_page = 1;
         if( get_option('permalink_structure') ) {
             $format = 'page/%#%/';
         } else {
             $format = '&paged=%#%';
         }
        echo paginate_links(array(
            'base'          => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format'        => $format,
            'current'       => max( 1, get_query_var('paged') ),
            'total'         => $total,
            'mid_size'      => 3,
            'type'          => 'list',
            'prev_text'     => $prev_arrow,
            'next_text'     => $next_arrow,
         ) );
    }
}

遗憾的是,paginate_links函数不允许更改显示页码的格式。

paginate_links函数来源:https://core.trac.wordpress.org/browser/tags/4.3.1/src/wp-includes/general-template.php#L2742

下面一行负责生成页码:

$page_links[] = "<a class='page-numbers' href='" . esc_url( apply_filters( 'paginate_links', $link ) ) . "'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</a>";

可以看到,页码只是作为<a>标签的内容插入,没有任何可能改变显示格式- number_format_i18n( $n )

要实现您的目标,您应该创建这个函数的自己的实现。以原wp paginate_links函数为例

对于任何仍在寻找实现这一目标的方法的人。我是这样做的:

$links = paginate_links( array(
   'base'         => esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) ),
   'format'       => '',
   'current'      => max( 1, get_query_var( 'paged' ) ),
   'total'        => $query->max_num_pages,
   'prev_next'    => false,
   'end_size'     => 4,
   'mid_size'     => 4,
   'type'         => 'array',
 ));
 $i = 0;
 $current_page = max( 1, get_query_var( 'paged' ) );
 foreach( $links as $link ){        
    $startrange = $i + 1;
    $endrange = $i + 10;
    // is active ?
    if($links[$current_page-1] == $link){
        echo preg_replace('/<span(.+?)>.+?<'/span>/i',"<span$1>$startrange - $endrange</span>",$link);
    }else{
        echo preg_replace('/<a(.+?)>.+?<'/a>/i',"<a$1>$startrange - $endrange </a>",$link);
    }

    $i += 10;
 }