小部件标题中未过滤的html不起作用

时间:2012-07-11 作者:amy

function update( $new_instance, $old_instance ) {
    if( current_user_can( \'unfiltered_html\' ) ) {
        $new_instance[\'title\']     = strip_tags( $new_instance[\'title\'], \'<small><span><b><br><a><strong>\' );
        $new_instance[\'more_text\'] = strip_tags( $new_instance[\'more_text\'], \'<div><span><strong><b>\' );
    } else {
        $new_instance[\'title\']     = strip_tags( $new_instance[\'title\'] );
        $new_instance[\'more_text\'] = strip_tags( $new_instance[\'more_text\'] );
    }
[...]
我肯定是管理员,我检查过我可以不过滤html。但是,当我在我的小部件中这样做时,就像在tut中看到的那样,它不起作用。Wordpress将其输出为htmlspecialchars。

有过滤器吗?希望它不是一个全局过滤器,我只是不想在一些小部件中使用它。

那么,当wordpress通过过滤器运行wigets时,wigets的消毒目的是什么呢?

考虑到这一点后,我将在全球范围内这样做,我让wp做它的事情,然后我只转换回我需要的东西。也许一个更好的解决方案是删除默认的esc\\u html过滤器,并用wp\\u kses替换它,只允许使用一些标记。这样,您仍然可以看到输入的所有内容,而没有任何内容被删除。嗯,至少不是在那个水平上。小部件本身可能会剥离它,也可能不会。

/** allow <small> tags inside widget titles */
add_filter( \'widget_title\', function($title) {
    $title = str_replace(\'&lt;small&gt;\', \'<small>\', $title);
    $title = str_replace(\'&lt;/small&gt;\', \'</small>\', $title);
    return $title;
} );
小部件现在可以允许标记甚至所有内容,wordpress会将所有内容转换为HTMLCharacter。因此,只有最终才会成为真正的html。

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

如果它将其输出为htmlspecialchars,您可以对其进行解码。

在widget()函数中:

echo $before_title;
echo htmlspecialchars_decode( $title );
echo $after_title;

结束

相关推荐

用XDEBUG调试WordPress主题,实时html输出

您好,我正在使用XDEBUG调试我的WordPress代码,调试时是否可以在浏览器中查看页面构建?此时,页面将一直挂起,直到调试过程完成,然后显示完全呈现的页面。理想情况下,我希望在调试主题代码时看到页面一点一点地构建起来。