我有自定义分页,允许我修改代码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]
最合适的回答,由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()通常指向较新的条目(指向集合的开头)。