如何正确控制分页中出现的数字和圆点?

时间:2016-06-11 作者:Darren Bachan

我有自定义分页,允许我修改代码WP输出的标记:

在里面functions.php

function wp_custom_pagination($args = [], $class = \'pagination\') {

            if ($GLOBALS[\'wp_query\']->max_num_pages <= 1) return;

            $args = wp_parse_args( $args, [
                \'mid_size\'           => 2,
                \'prev_next\'          => false,
                \'prev_text\'          => __(\'Older posts\', \'textdomain\'),
                \'next_text\'          => __(\'Newer posts\', \'textdomain\'),
                \'screen_reader_text\' => __(\'Posts navigation\', \'textdomain\'),
            ]);

            $links     = paginate_links($args);
            $next_link = get_previous_posts_link($args[\'next_text\']);
            $prev_link = get_next_posts_link($args[\'prev_text\']);
            $template  = apply_filters( \'navigation_markup_template\', \'
            <nav class="navigation %1$s" role="navigation">
                <div class="nav-links">%3$s<div class="page-numbers-container">%4$s</div>%5$s</div>
            </nav>\', $args, $class);

            echo sprintf($template, $class, $args[\'screen_reader_text\'], $prev_link, $links, $next_link);

        }
        add_filter(\'previous_posts_link_attributes\', function() 
        { 
        return \'class="next"\'; 
        }); 

        add_filter(\'next_posts_link_attributes\', function() 
        { 
        return \'class="prev"\'; 
        });
以下是我在模板文件中的调用方式:

<?php wp_custom_pagination([
   \'prev_text\' => __( \'<i class="fa fa-long-arrow-left"></i> Prev Page\', \'textdomain\' ), 
   \'next_text\' => __( \'Next Page <i class="fa fa-long-arrow-right"></i>\', \'textdomain\' )
 ]); 
?>
现在,这在很大程度上是可行的,但我有一个live example 我将其设置为每页只能看到1篇文章,以便进行测试。分页创建了太多的数字,这破坏了我的样式,但这更多的是CSS,我正在考虑一个解决方案。我能让它看起来像这样吗?:

[1] [2][3]。。。[9]

[1] 。。。[4] [5][6]。。。[9]

[1] 。。。[7] [8][9]

1 个回复
最合适的回答,由SO网友:Cai 整理而成

\'mid_size\' => 2, 控制当前页面每侧显示的数字数量。目前,您将其设置为2,这意味着您将得到5个数字(当前和每侧各2个)。。除了在第一页和最后一页上,你的一边是2,但另一边没有数字显示。

您可以动态设置mid_size 根据您当前所在的页面:

global $wp_query;

$mid_size = 1; // default to 1 number each side

// Check if we are on the first or last page
$current_page = get_query_var(\'paged\');
if ( !$current_page || $current_page == $wp_query->max_num_pages ) {
    $mid_size = 2; // 2 numbers before/after the current page
}

$args = wp_parse_args( $args, [
    \'mid_size\' => $mid_size,
    //... rest of code
你所要做的就是检查paged 查询变量,如果未设置,则您位于第一页,如果它等于您位于最后一页的总页数。

如果您在最后一页的第3页或第2页上,您将在一边有1个数字,另一边有2个数字,因为第一页和最后一页没有包含在“mid\\U大小”中,但我不确定有什么方法可以轻松防止这种情况,因为您无法独立控制开始和结束数字。

我还注意到你之前/下一篇文章的链接是错误的(请查看你的实例)。它们的工作方式与您的预期相反。如果你读了文件,they say:

因为post查询通常按逆时间顺序排序,所以next\\u posts\\u link()通常指向较旧的条目(指向集合的末尾),而PREVISSION\\u link()通常指向较新的条目(指向集合的开头)。