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

ste*_*ase 3 php wordpress hook comments add-filter

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

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

<p>Hello User!</p>
<p>Thank you for your comment.</p>
<p>Stefan</p>
Run Code Online (Sandbox Code Playgroud)

多数民众赞成,但正如我所说,我想把它包装成一个<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');
Run Code Online (Sandbox Code Playgroud)

正如我从输出中看到的那样,给定的过滤器可以工作,但它对内容的第一段产生负面影响,如下例所示.第一段应该是<p>Hello User!</p>这样的:Hello User!.

<div class="comment-text">
    Hello User!
    <p>Thank you for your comment.</p>
    <p>Stefan</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我有什么想法或暗示我做错了什么?

Ivo*_*bev 6

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

add_filter('comment_text', 'stefan_wrap_comment_text', 1000);
Run Code Online (Sandbox Code Playgroud)


ste*_*ase 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 );
Run Code Online (Sandbox Code Playgroud)

优先级为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);
Run Code Online (Sandbox Code Playgroud)