尝试挂钩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>
任何想法或提示我做错了什么?
答案 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);