使用bbpress制作论坛的童鞋,会发现只要开启了线状回复,那么论坛帖子就没有分页了,所有的回复全都在同一页,这样是不合国内论坛er的使用习惯的,国人是既需要线状回复,又需要帖子分页。那么怎么在开启线状回复的同时也开启分页呢?我们需要动手写一些代码。下面就是这些代码和步骤。
第1步:将以下函数复制到functions.php文件中。这是从/includes/replies/functions.php中的原始bbp_list_replies()修改的,负责查询嵌套的回复。当您在设置 ->论坛下启用线状(嵌套)回复时,将在loop-replies.php中调用该函数。修改将允许我们传递每页的当前页面和回复数,因此查询返回正确的回复帖子。
[php]function wpup_bbp_list_replies( $args = array() ) {
// Reset the reply depth
bbpress()->reply_query->reply_depth = 0;
// In reply loop
bbpress()->reply_query->in_the_loop = true;
$r = bbp_parse_args( $args, array(
‘walker’ => null,
‘max_depth’ => bbp_thread_replies_depth(),
‘style’ => ‘ul’,
‘callback’ => null,
‘end_callback’ => null
), ‘list_replies’ );
// Get replies to loop through in $_replies
$walker = new BBP_Walker_Reply;
$walker->paged_walk( bbpress()->reply_query->posts, $r[‘max_depth’], $r[‘page’], $r[‘per_page’], $r );
bbpress()->max_num_pages = $walker->max_pages;
bbpress()->reply_query->in_the_loop = false;
}
[/php]
步骤2:接下来将下面的函数复制到您的functions.php文件中,紧跟在步骤1中的上一个文件之后。这段代码负责显示页码导航。这里的两个重要变量是$ numeplies – 当前显示的主题的回复总数和$paged – 访问者显示的当前页码。您将了解我们将如何在接下来的几个步骤中传递这些值。
[php]//自定义bbpress分页功能
function wpup_custom_pagination($numreplies=”, $pagerange=”, $paged=”, $repliesperpage=”) {
/**
* $pagerange
* 当前页面后要显示的页数
* 与 ‘shaw_all’ => false 结合使用
*/
if (empty($pagerange)) {
$pagerange = 3;
}
/**
* $numreplies
* 当前主题中的回复总数是多少
* $numpages
* 根据每页的回复和回复数计算要显示的总页数
*/
if ($numreplies != ”) {
$numpages = ceil($numreplies / $repliesperpage);
}
//如果未传递,则将值1分配给$paged变量
global $paged;
if (empty($paged)) {
$paged = 1;
}
/**
* 我们构造分页参数以进入我们的paginate_links
* 功能.
*/
$pagination_args = array(
‘base’ => get_pagenum_link(1) . ‘%_%’,
‘format’ => ‘page/%#%’,
‘total’ => $numpages,
‘current’ => $paged,
‘show_all’ => False,
‘end_size’ => 1,
‘mid_size’ => $pagerange,
‘prev_next’ => True,
‘prev_text’ => __(‘<’),
‘next_text’ => __(‘>’),
‘type’ => ‘plain’,
‘add_args’ => false,
‘add_fragment’ => ”
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo ”
<nav class=”custom-pagination”>”; echo $paginate_links; echo “</nav>
“; } }[/php]
第3步:如果你还没有这么做过,请将/ plugins / bbpress / templates / default / bbpress /中的loop-replies.php复制到/ yourtheme / bbpress /,这一步是必要的,因为我们不想修改核心插件文件,避免在插件更新时丢失我们的更改。该文件负责显示主题内的回复列表。
第4步:编辑loop-replies.php。在文件的顶部和开始<?php标记之后,添加以下代码行:
[php]$paged = ( get_query_var(‘paged’) ) ? get_query_var(‘paged’) : 1;[/php]
这里我们根据用户所在的页面检查/设置$ paged变量,以便我们在下面进一步使用它。
步骤5:使用我们在步骤1中创建的自定义函数替换默认的bbp_list_replies()。向下滚动并查看第45行
[php]<?php bbp_list_replies(); ?>[/php]
替换为
[php]
<?php //规定每页回复只有5个 wpup_bbp_list_replies(array(‘page’=&gt;$paged,’per_page’=&gt;5)); ?>[/php]
*请记住每页查看的回复数量更改为5。此外,请注意,这里的指定每页的数量,仅考虑主楼层,楼中楼不考虑在计数内。
第6步:接下来我们要调用我们的分页功能,以显示页面导航。要执行此操作,请向下滚动到第84行并在</ ul>结束标记后面包含以下内容:
[php]
<div id=”pagination-links”>
<?php //Change 15 to number of replies you specified in wpup_bbp_list_replies //First find the number of parent posts only and pass that to the custom pagination function $replyposts = bbpress()->reply_query->posts;
$numparentreplies = 0;
foreach($replyposts as $value){
if($value->reply_to == 0) {
$numparentreplies++;
}
}
wpup_custom_pagination($numparentreplies,””,$paged, 5); ?></div>
[/php]
第7步:最后,让我们添加一些CSS来设置分页的样式。无论如何你都可以随心所欲地设计风格,但我还提供了一些基本款式以及如果你决定使用它们应该是什么样子。
[css]
/*Replies Pagination*/
#pagination-links {
text-align: right;
}
#pagination-links .page-numbers {
display: inline-block;
margin: 0 2px;
}
#pagination-links a.page-numbers{
display: inline-block;
padding: 5px;
background: #000;
color: #FFF;
text-align: center;
text-decoration: none;
width: 20px;
}
#pagination-links span.page-numbers.current{
display: inline-block;
padding: 5px;
background: #F00;
color: #FFF;
text-align: center;
text-decoration: none;
width: 20px;
}
#pagination-links .prev, #pagination-links .next {
width: 40px
}
#pagination-links a.page-numbers:hover {
background: #555;
}
[/css]
这是前端呈现出来的分页
结尾
在使用这两个单独的函数并传递类似的参数时,我们能够通过分页实现bbPress线程(嵌套)回复。我已经对它进行了测试,对于拥有超过1000名成员的网站来说,结果相当快,希望它能帮助您为社区论坛实施分页。这两个功能都易于理解,快速实现并提供一定程度的自定义。
欢迎所有评论,问题或改进建议,所以如果您有任何建议,请在下面给我留言,我将尽力回答或修改。快乐编程!
全部评论 (0条评论)