非串联式评论使用指向原始评论的链接进行回复

时间:2012-02-05 作者:sarytash

我将解释我正在努力实现的目标。

我想有一个定期的非线程(平面/经典)评论,每个评论都有一个回复链接。当有人回复评论时,回复评论将作为最新评论出现在顶部(或底部),就像在默认的非线程评论中一样,但与默认的非线程评论不同,回复应显示指向原始评论/作者的链接。

wordpress论坛上有一个提议的解决方案:

http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments

我就是不想让它发挥作用。我不确定海报在哪些文件中放置了不同的代码片段。我尝试使用代码和挂钩函数来注释帖子:

add_action(\'comment_post\', \'print_reply_link\', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( \' in reply to <a href="%1$s">%2$s</a>\', $parent_link, $parent->comment_author );
    } 
  }
}
这返回了一个空白页,其中包含“回复authorname“。重新加载帖子后,将正确显示回复评论,但没有指向原始评论的任何链接。”

我的编码技能非常基础,所以我不知道应该如何进行。非常感谢您的帮助。

1 个回复
SO网友:s_ha_dum

这是我的解决方案,而不是WordPress论坛上建议的解决方案。这其实相当简单,但需要几个步骤。

1) 转到wp admin->Settings->Discussion并关闭线程注释。这将禁用我们想要的线程,但也将取消我们“回复”特定评论的能力。我们必须把它放回去。

2) 将下面的脚本添加到主题的函数中。php或插件。

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script(\'comment-reply\');
}
add_action(\'wp_enqueue_scripts\',\'load_script_for_fake_threading\');
3)注释的打印通过回调wp_list_comments. TwentyEleven使用该函数twentyeleven_comment() 在its中functions.php. 如果主题没有回调,则需要创建一个回调。默认情况下,使用“wp includes/Comment template.php”中Walker\\u Comment类的start\\el方法的内容。复制或复制主题的回调并将函数重命名为fake_threaded_comment.

3) 查找wp_list_comments 在主题中的功能comments.php 并更改回调。它应该看起来像:

wp_list_comments(array(\'callback\'=>\'fake_threaded_comment\'));
4)现在我们要做一点欺骗。在该回调中,“fake\\u threaded\\u comment”,应该调用comment_reply_link 作用我们需要对其进行编辑,以便传递硬编码的“depth”和“max\\u depth”参数。我们正在将“depth”设置为1,将max\\u depth设置为2。这将返回我们的“回复”按钮/链接。

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        \'reply_text\' => __( \'Reply <span>&darr;</span>\', 
        \'themetextdomainname\' ), 
        \'depth\' => 1, 
        \'max_depth\' => 2 
)));
5)设置指向父注释的链接。在回调函数中,您可能已经注意到对$comment. $comment->comment_parent 是回复评论的ID,并且get_comment_link($comment->comment_parent) 提供父注释的URL(不是完整的锚标记)。get_comment($comment->comment_parent) 将获取父注释数据。所以,就像。。。

$pcom = get_comment($comment->comment_parent);
echo \'<a href="\'.get_comment_link($comment->comment_parent).\'">This is a reply to \'.$pcom->comment_author.\'</a>\';
就是这样。您现在可以对特定注释进行注释,但一旦发布,注释将显示在注释列表的末尾或开头,具体取决于加载顺序。

在WordPress 3.4.1上使用TwentyEleven进行了测试(虽然有些过时,但它已经在我的开发服务器上了)。我确信主题或插件可以做一些事情来打破这种局面,但我不认为一个表现良好的主题或插件会打破这种局面。

这是我今天的好事。如果出了什么问题,请告诉我。

结束

相关推荐

Ajax submit comments

我想通过ajax提交评论。单击comment submit按钮,通过jquery的ajax方法和结果发布评论(“等待审核…”)显示在页面上。我进入了剧本。js文件,并为按钮添加了一个单击处理程序。它验证并执行ajax提交,但这不起作用。单击提交评论仍会重定向到wp评论帖子。php页面。让它发挥作用的秘诀是什么?以下是我在脚本中的内容。js公司:$(\"#my_comment_form\").validate({ submitHandler: function(data){