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)
我有什么想法或暗示我做错了什么?
尝试降低功能的优先级,也许你先前有一些格式化功能.
add_filter('comment_text', 'stefan_wrap_comment_text', 1000);
Run Code Online (Sandbox Code Playgroud)
哎呀,只是偶然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)
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |