在WordPress中忽略每页最大值的嵌套注释

时间:2011-06-20 作者:Mat

我的默认设置(IIRC)为每页10条评论,最大嵌套深度为5。

问题(或至少是小麻烦)在于,对评论的回复并没有计入每页最多10条。我可以理解,您不想中断线程,这应该避免,但在我的测试用例中,我有:

test10
- test10 2
- test10 3
- - test10 4
- - - test10 5
- - test10 6
- test10 7
- test10 8
- test10 9
test9
test8 (should be on a new page?)
test7
test6
test5
test4
test3
test2
test1
它们都显示在同一页上。但实际上,在test9评论之后,我想打破这一点。

我有一种奇怪的感觉,这并不容易。希望在主题框架中会有一种方法,但如果需要的话,我不怕修改wordpress。

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

因为我觉得这对我自己也非常有用,所以我继续写了一个自定义步行器,Walker_Paged_Threaded.

我已经尽我最大的努力发表评论,诚然这有点牵强,但我对结果感到满意。

如何使用它

该类使用与原始类相同的抽象方法编写Walker, 以免仅限于评论。然而,为了保持简单,我们将rename it*;

Walker_Comment_Paged_Threaded extends Walker_Comment
现在在您的主题中comments.php;

wp_list_comments( array( \'walker\' => new Walker_Comment_Paged_Threaded ) );
哇嘿!说明线程的分页注释。

已知的副作用

因为我们改变了计算页面的方式,函数如下get_comment_pages_count 当传递以下参数时,将开始表现异常$per_page$threaded. 然而,情况并非如此。

However, get_comment_pages_count 仍将回退Walker_Comment 如果$wp_query::max_num_comment_pages 为空。但如果你打电话wp_list_comments 首先,它将运行walker并自动设置属性。

If you are displaying comment pagination or page links before your comments, 你需要这样做;

<?php

/**
 * Capture comments in an output buffer. The function needs to run before
 * displaying page links, as it runs the walker and then sets the
 * \'max_num_comment_pages\' property on $wp_query.
 */
ob_start();

wp_list_comments( array( \'walker\' => new Walker_Comment_Paged_Threaded ) );
$comments_list = ob_get_clean();

?>

<?php paginate_comments_links(); ?>

<?php echo $comments_list; ?>
相信我,这实际上是最整洁的解决方法!

*如果你想保持它的抽象性,每个意图没有多个副本,你可以伪造“多重继承”,这is a little ugly.

N.B. 我认为最好将此作为一个单独的答案,因为这实际上是一个答案!

SO网友:TheDeadMedic

起初我喜欢“nu-uh”,但后来我喜欢“哦,耶!”)

最棒的是所有的“分页”都是在PHP中完成的。换句话说foreach 循环和嵌套数组,而不是SQL限制和偏移量。

这项工作的真正内容可以归结为Walker::paged_walk() (具体来说,大约是该方法的一半)。

本质上,它循环遍历注释并按其父级对其进行堆叠,然后计算要显示的“顶层”集的哪个部分(基于$page_num$per_page args)。然后它简单地在这个“切片”上循环,还循环注释子级(如果有)。

It can and shall be done! 它所需要的只是一个良好的头脑来应用相同的逻辑,但也要将嵌套的注释引入到图片中。那是不是我是另一个问题!

但我想我现在就发布这篇文章,只是为了让事情变得更清楚,希望能让事情继续发展下去。

N.B. 还有另一种方法,Walker::get_number_of_root_elements(), 仅由以下人员使用get_comment_pages_count() (至少在堆芯中)。However, <这个函数到处都在使用,所以不管方法名称意味着什么,它都需要适应新算法并封装子级。

SO网友:maryisdead

你可能想和Walker_Comment 在wp includes/comment模板中。php。

结束

相关推荐

How to prevent spam comments?

我已经安装了NoSpamMX插件。我很长时间没有收到垃圾评论了。但现在我收到了很多垃圾评论,尤其是在一篇帖子中。为什么只有那个帖子才会有这么多垃圾邮件?