以帖子形式评论-了解wp_list_Comments

时间:2012-10-23 作者:user22831

我正在创建一个网站,其中一个中心问题将出现在首页,一级评论摘录链接到一个包含完整一级评论的页面,几乎以帖子的形式呈现,并在下面嵌套对该评论的回复。为什么要将评论作为帖子?这似乎是一种让用户在不访问后端的情况下编写内容的好方法。

我遇到的问题是对特定评论的嵌套回复。我试图保持简单,尽可能使用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评论工作原理的见解,以及任何其他实现我的目标的伟大想法,都将不胜感激。我的目标是将第一层评论作为帖子呈现,并在下面嵌套对该评论的回复。

4 个回复
SO网友:dmarges

签出comment_reply_link 作用

例如:

comment_reply_link(
    array_merge(
        $args,
        array(
            \'depth\' => $depth,
            \'max_depth\' => $args[\'max_depth\'],
        )
    )
);

SO网友:Ralf912

是否已在下启用嵌套注释Settings - Discussion - Enable threaded (nested) comments ?

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删除父元素。

我希望这对你有帮助。

SO网友:Zach

与其让评论系统做一些不该做的事情,我会为用户生成的内容创建一个自定义的帖子类型,并在网站前端公开一个表单,允许用户生成该CPT类型的内容。这可以通过许多表单插件轻松完成,例如重力表单、忍者表单或火山口表单(其中一些需要付费附加组件才能工作)。您也可以编写一些做同样事情的自定义代码,这只需要做更多的工作。我建议你看看this tutorial using CMB2 或代码here 一个好的起点。

结束

相关推荐

Comments deactivated

我无法对新文章发表评论(否add comment 链接可用)。我使用Wordpress 3.4。我检查了讨论属性,并将其设置为允许客人对文章发表评论其他(相关)选项均未选中,因为我安装了一些插件,所以感觉评论不可用。但我尝试停用一些,但没有成功地再次激活评论。建议?