挂钩到comment_text()以添加周围的标签

时间:2010-04-09 16:23:58

标签: php wordpress comments hook add-filter

尝试挂钩Wordpress API提供的函数comment_text(),将每个注释的输出包装到<div>...</div>容器中,我遇到了以下问题:

如果没有我添加的过滤器,comment_text()的输出如下所示:

<p>Hello User!</p>
<p>Thank you for your comment.</p>
<p>Stefan</p>

多数民众赞成,但正如我所说,我想把它包裹成<div class="comment-text">...</div>。据我所知,这样做的正确方法是在我的主题的functions.php添加过滤器,所以我做了:

function stefan_wrap_comment_text($content) {
    return "<div class=\"comment-text\">". $content ."</div>";
}
add_filter('comment_text', 'stefan_wrap_comment_text');

正如我从输出中看到的那样,给定的过滤器有效,但它对内容的第一段产生负面影响,如下例所示。第一段应为<p>Hello User!</p>,但如下所示:Hello User!

<div class="comment-text">
    Hello User!
    <p>Thank you for your comment.</p>
    <p>Stefan</p>
</div>

任何想法或提示我做错了什么?

2 个答案:

答案 0 :(得分:6)

尝试降低功能的优先级,也许您之前有一些格式化功能。

add_filter('comment_text', 'stefan_wrap_comment_text', 1000);

答案 1 :(得分:5)

哎呀,只是偶然发现文件wp-includes/default-filters.php,发现默认情况下有几个过滤器应用于同一个函数:

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 ); 
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

优先级为30的最后一个过滤器调用函数wpautop(),该函数用于替换<p>...</p>的双换行符。默认情况下,add_filter()会在优先级10上注册新的过滤器。通过选择更高的数字,将我的过滤器更改为最后一个。一切正常。

// This doesn't work because default priority is 10:
// add_filter('comment_text', 'stefan_wrap_comment_text');
// Add a lower priority (higher number) to apply this filter at last: 
add_filter('comment_text', 'stefan_wrap_comment_text', 99);