非主题评论回复并带有原始评论的链接


10

我将解释我要完成的工作。

我希望有常规的非线程(扁平/经典)评论,并带有指向每个评论的回复链接。当有人回复评论时,回复评论将以最新评论的形式在顶部(或底部)结尾,就像在默认的非线程评论中一样,但是与默认的非线程评论不同,回复应显示指向的链接。原始评论/作者。

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

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

我只是不工作。我不确定发布者将哪些代码放在不同的文件中。我试图使用代码并将函数挂钩到comment_post:

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 );
    } 
  }
}

这将返回一个空白页,其中包含“回复作者姓名 ”。重新加载帖子后,回复评论会正确显示,但没有指向原始评论的任何链接

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


什么是的内容hrefa“答复to`按了‘跟随在Chrome检查元素’工具(或您选择的浏览器类似)?
mor7ifer 2012年

经过大量的尝试和错误,我已经解决了该问题。诀窍是按正确的顺序获取代码段,并将其放置在注释和函数文件中。的s%1$s装置,所述参数被视为并呈现为一个字符串。这在sprintf函数的php手册中有详细说明:php.net/manual/en/function.sprintf.php
sarytash 2012年

3
您应该提交您所做的解决方案,以帮助保持网站的井井有条,并帮助遇到问题的任何人快速有效地克服它。
mor7ifer 2012年

是的,如果您可以发布一个很好的解决方案。
Borek Bernard'3

1
同意,很乐意看到这个动作。
helgatheviking 2012年

Answers:


4

这是我的解决方案,而不是WordPress论坛上建议的建议解决方案。事实证明这很容易,但是涉及几个步骤。

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

2)将以下脚本添加到主题的functions.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()在其中使用该功能functions.php。如果您的主题没有回调,则需要创建一个回调。默认情况下,使用“ wp-includes / comment-template.php”中Walker_Comment类的start_el方法的内容。复制该副本或复制主题的回调并将函数重命名为fake_threaded_comment

3)在您的主题中找到wp_list_comments函数comments.php并更改回调。它应该看起来像:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4)现在我们要作弊。在该回调“ fake_threaded_comment”中,应该调用comment_reply_link函数。我们需要对其进行编辑,以便传递硬编码的“ depth”和“ max_depth”参数。我们将“ depth”设置为1,将max_depth设置为2。这将使我们的“ Reply”按钮/链接返回。

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进行了测试(稍有过时,但已经在我的开发服务器上了)。我确信主题或插件可以做一些事情来打破这一点,但是我认为行为良好的主题或插件不会破坏它。

那是我今天的好事。如果发生问题,请告诉我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.