分页,最多只显示3页

时间:2018-11-23 作者:Zayd Bhyat

我正在尝试使用Wordpress paginate功能最多只显示3页(客户端希望这样),这样当您进入页面时,它会显示您当前所在的页面以及上一页和下一页:

This is the result they want

不幸的是,当我这样做时,我得到了几页,包括最后一页:

This is the result I get from my code

这是我当前的分页代码,请注意格式是这样的,因为我有选项卡,每个选项卡都需要用不同的查询分页

echo \'<div id ="nav_pages">\'; 
    echo \'<div class="prev_first"></div>\'; 
    echo \'<div class="pages">\';
$pag_args1 = array(
\'type\'         => \'list\',
\'prev_next\'       => False,
\'end_size\'        => 1,
\'add_args\'        => false,
\'add_fragment\'    => \'\',
\'show_all\' => false,
\'base\'         => \'\' . $url . \'?paged1=%#%\',                
    \'format\'  => \'?paged1=%#%\',
    \'current\' => $paged1,
    \'total\'   => $get_mining->max_num_pages);

    echo paginate_links( $pag_args1 );
    echo \'</div>\';
    echo \'<div class="page_x_of_y2">Page <span>\' . $paged1 . \'</span> of <span>\' . $get_mining->max_num_pages . \'</span></div>\';    
echo \'</div>\';
我是否可以修改此代码,使其看起来像第一个图像中的分页,而不是第二个图像中的分页?我是否需要编写一个自定义分页函数来实现这一点?我不同意客户的要求,因为我觉得后者是更好的选择,但你知道他们说什么:“客户总是对的”

UPDATED PARTIAL SOLUTION

在做了更多的研究之后,我发现了以下链接:Getting paginate_links()\'end_size\' to display 0这个解决方案几乎可以让我实现我想要的目标,下面是我修改后的代码:

echo \'<div id ="nav_pages">\'; 
    echo \'<div class="prev_first"></div>\'; 
    echo \'<div class="pages">\';
$pag_args1 = array(
\'type\'         => \'array\',
\'prev_next\'       => False,
\'end_size\'        => 0,
\'mid_size\'        => 1,
\'add_args\'        => false,
\'add_fragment\'    => \'\',
\'show_all\' => false,
\'base\'         => \'\' . $url . \'?paged1=%#%\',                
    \'format\'  => \'?paged1=%#%\',
    \'current\' => $paged1,
    \'total\'   => $get_mining->max_num_pages);
    $paginate_links = paginate_links( $pag_args1 );
    $c=$pag_args1[\'current\'];
    $allowed=[sprintf(\'/?paged1=%d\',$c-1),\'current\',sprintf(\'?paged1=%d\',$c+1)];
    $paginate_links=array_filter(
        $paginate_links,
    function( $value ) use ( $allowed ) {
        foreach( (array) $allowed as $tag )
        {
            if( false !== strpos( $value, $tag ) )
                return true;
        }
        return false;
    }
);

   if( ! empty( $paginate_links ) )
        printf("<ul class=\'page-numbers\'>\\n\\t<li>%s</li>\\n</ul>\\n",join( "</li>\\n\\t<li>", $paginate_links));
    echo \'</div>\';
    echo \'<div class="page_x_of_y2">Page <span>\' . $paged1 . \'</span> of <span>\' . $get_mining->max_num_pages . \'</span></div>\';    
    echo \'</div>\';


}//Endif
这几乎达到了我想要的,现在唯一的问题是,当我超过第1页时,它不会显示上一页。我越来越近了!!

2 个回复
最合适的回答,由SO网友:Zayd Bhyat 整理而成

由于我问题更新部分的链接,找到了答案。以下是解决方案:

echo \'<div id ="nav_pages">\'; 
    echo \'<div class="prev_first"></div>\'; 
    echo \'<div class="pages">\';
$pag_args1 = array(
\'type\'         => \'array\',
\'prev_next\'       => False,
\'end_size\'        => 0,
\'mid_size\'        => 1,
\'add_args\'        => false,
\'add_fragment\'    => \'\',
\'show_all\' => false,
\'base\'         => \'\' . $url . \'?paged1=%#%\',                
    \'format\'  => \'?paged1=%#%\',
    \'current\' => $paged1,
    \'total\'   => $get_mining->max_num_pages);
    $paginate_links = paginate_links( $pag_args1 );
    $c=$pag_args1[\'current\'];
    $allowed=[sprintf(\'?paged1=%d\',$c-1),\'current\',sprintf(\'?paged1=%d\',$c+1)];
    $paginate_links=array_filter(
        $paginate_links,
    function( $value ) use ( $allowed ) {
        foreach( (array) $allowed as $tag )
        {
            if( false !== strpos( $value, $tag ) )
                return true;
        }
        return false;
    }
);

   if( ! empty( $paginate_links ) )
        printf("<ul class=\'page-numbers\'>\\n\\t<li>%s</li>\\n</ul>\\n",join( "</li>\\n\\t<li>", $paginate_links));
    echo \'</div>\';
    echo \'<div class="page_x_of_y2">Page <span>\' . $paged1 . \'</span> of <span>\' . $get_mining->max_num_pages . \'</span></div>\';    
    echo \'</div>\';
所以我要做的是:

将分页参数设置为数组将结果数组存储在变量中,并将当前页存储在变量中创建另一个具有允许值的变量,在这种情况下,它是当前页,并且在任意一侧上下都有一页我的解决方案现在是这样的:

Solution I wanted and achieved

SO网友:Alvaro

检查中的mid\\u size参数paginate_links

mid\\u size:当前页两侧的数字,但不包括当前页。默认值2。

因此,将其设置为:\'mid_size\' => 1

此外,您可能不想显示第一页和最后一页,因此请将其设置为0(默认为1):\'end_size\' => 0

希望这有帮助。

-

编辑:

end属性似乎没有隐藏最后一个元素。最简单的方法是使用CSS隐藏它:

.dots ~ .dots + .page-numbers { display: none; }
否则,要从函数中删除实际输出,需要对其进行调整。您可以返回一个数组,更改type 参数,循环遍历元素并删除您不感兴趣的元素。

结束

相关推荐

Count posts for pagination

我正在为一个网站分页<;上一页(页码)下一页>很简单,已经完成。但是现在我需要添加一个选择器来直接转到页面(例如:转到第7页),要这样做,我需要知道有多少页面,为此我需要计算在查询中找到了多少帖子。问题是这个网站有太多的帖子(>13.000),查询所有帖子都会减慢页面加载速度,这就像。。。10秒后页面才能加载。显然,这是不可接受的。分页解决了这个问题,因为一次只加载50或100篇文章,但我无法将它们全部计算在内。我可以在不加载的情况下统计某个查询中的帖子吗?或者我可以通过其他方式获得页数吗