我正在创建一个网站,其中一个中心问题将出现在首页,一级评论摘录链接到一个包含完整一级评论的页面,几乎以帖子的形式呈现,并在下面嵌套对该评论的回复。为什么要将评论作为帖子?这似乎是一种让用户在不访问后端的情况下编写内容的好方法。
我遇到的问题是对特定评论的嵌套回复。我试图保持简单,尽可能使用wp函数。我的方法是构建一个包含对特定评论的所有回复的数组,然后将该数组传递给wp_list_comments
. 除嵌套部分外,其他部分均有效;所有回复都被视为处于同一级别或层级。显然,我不完全明白wp_list_comments
作品
下面是我的循环,用于创建对特定注释的所有回复的数组(作为$_GET[comment_id]
):
$my_comments = array();
$args = array(
\'type\' => \'comment\',
\'status\' => \'approve\',
\'parent\' => $_GET[comment_id],
);
$my_comments1 = get_comments($args);
if(!empty($my_comments1)) {
$my_comments = array_merge($my_comments, $my_comments1);
$x=1;
$finished = false;
while(! $finished) {
foreach(${\'my_comments\'.$x} as $my_comment) {
if($my_comment->comment_ID) {
$args = array(
\'type\' => \'comment\',
\'status\' => \'approve\',
\'parent\' => $my_comment->comment_ID,
);
$x++;
${\'my_comments\'.$x} = get_comments($args);
if(!empty(${\'my_comments\'.$x})) {
$my_comments = array_merge($my_comments, ${\'my_comments\'.$x});
}
elseif(empty(${\'my_comments\'.$x})) {$finished = true;}
}
}
}
} // if not empty
下面是我的展示方式:
<ol class="commentlist">
<?php wp_list_comments( array( \'style\' => \'ol\' ), $my_comments); ?>
</ol><!-- .commentlist -->
任何关于wp\\u list\\u评论工作原理的见解,以及任何其他实现我的目标的伟大想法,都将不胜感激。我的目标是将第一层评论作为帖子呈现,并在下面嵌套对该评论的回复。
SO网友:Ralf912
对于嵌套注释的propper显示,必须显示父注释:
$parent = filter_input( INPUT_GET, \'comment_id\', FILTER_SANITIZE_NUMBER_INT );
$my_comments = array( get_comment( $parent ) );
$args = array(
\'type\' => \'comment\',
\'status\' => \'approve\',
\'parent\' => $parent,
);
$my_comments1 = get_comments($args);
[...]
echo \'<ol class="comments-area">\';
wp_list_comments( array( \'style\' => \'ol\' ), $my_comments );
echo \'</ol>\';
而且评论的顺序错误(先是旧的回复)。添加
array_reverse()
:
[...]
if(!empty(${\'my_comments\'.$x})) {
$my_comments = array_merge($my_comments, array_reverse( ${\'my_comments\'.$x} ) );
}
[...]
现在解决父注释的问题。父注释显示为post,但需要适当显示回复。您必须从列表中“删除”父注释。
您可以使用css隐藏它:
<style>
ol.comments-area > li:first-child { list-style-type: none }
ol.comments-area > li:first-child > div { display:none }
</style>
或者使用jQuery/JavaScript删除父元素。
我希望这对你有帮助。