我正在尝试使用Wordpress paginate功能最多只显示3页(客户端希望这样),这样当您进入页面时,它会显示您当前所在的页面以及上一页和下一页:
不幸的是,当我这样做时,我得到了几页,包括最后一页:
这是我当前的分页代码,请注意格式是这样的,因为我有选项卡,每个选项卡都需要用不同的查询分页
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页时,它不会显示上一页。我越来越近了!!
最合适的回答,由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>\';
所以我要做的是:
将分页参数设置为数组将结果数组存储在变量中,并将当前页存储在变量中创建另一个具有允许值的变量,在这种情况下,它是当前页,并且在任意一侧上下都有一页如果要显示页面,则使用仅允许允许的值的函数筛选数组,最后显示分页数组我的解决方案现在是这样的: