Avoid converting ">" to >

时间:2012-11-17 作者:Donovan

我正在使用一个降价插件并试图编写一个blockquote

像这样

但是Wordpress将“>”转换为html实体,因此结果看起来

&燃气轮机;像这样

有没有办法避免这种情况?

4 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

筛选the_content

function wpse72941_content_filter( $content ) {
    $new_content = \'\';
    foreach( preg_split( \'/((\\r?\\n)|(\\r\\n?))/\', $content ) as $line ) {
        $new_content .= preg_replace( \'/^>/\', \'>\', $line ) . \'\\r\\n\';
    }
    return $new_content;
}
add_filter( \'the_content\', \'wpse72941_content_filter\', 1 );
我不知道你的降价插件——对于上述方法,我假设降价是在从数据库检索帖子之后,而不是在将其保存到数据库之前进行解释的。一、 e.降价插件也会过滤the_content.

正则表达式^> 匹配项> 如果这些是字符串的前四个字符。在上面,内容是逐行迭代的,因此> 行首的图元将转换回> 字符。

添加过滤器时,我们将优先级设置为高(1), 这样我们的实体转换将在降价解释之前运行。

当添加到主题的函数时,上述功能将起作用。php,但可能更适合插件。实际上,markdown插件应该自己处理它。

阻止TinyMCE转换实体

如果您需要在实体转换发生的地方停止实体转换,则在将其写入数据库之前,您必须更改TinyMCE的(编辑器的)configuration, 这个entities 和/或entity_encoding 选项看起来很有希望
tiny_mce_before_init 可以将自定义配置值传递给WP编辑器的筛选器。

如果不是因为这个,我也会提供一个工作示例:

Encoding Type: raw | All characters will be stored in non-entity form except these XML default entities: & < > "
来自TinyMCE文档entity_encoding

因此,对于所讨论的特定实体而言,这似乎更为复杂
这也可能是禁用可视化编辑器可能不够的原因
可能是\'named\' 作为的值entity_encoding 和一份没有gt 对于entities 也许可以
否则onPostProcess 这将是最后一条路。

不过,如果上述假设成立,并且对数据库检索的帖子进行过滤就足够了,那么生活就会更简单。

SO网友:Ankur

如果您使用的是visual editor> 将自动转换。关闭visual editor并使用它。

SO网友:Tiago Gouvêa

我使用以下方法解决此问题:

function my_content_filter( $content ) {
    $new_content = str_replace(\'>\',\'>\',$content);
    return $new_content;
}
add_filter( \'the_content\', \'my_content_filter\', 1 );
我认为这并不迷人,但它很管用。。

SO网友:Glen Whitney

我在Wordpress 4.9.4中遇到了一个基本相同的问题,但在我的情况下,罪魁祸首是wp_filter_post_kses() 过滤器添加到content_save_pre 筛选依据wp-includes/kses.php. 此过滤器具有多种效果,包括转换<&;,>添加到实体并删除各种HTML标记。KSES参与的一个诊断指示是,对于多站点安装的超级管理员用户,这些字符没有转换为实体,因为KSES没有为超级管理员安装其过滤器。

从首字母缩略词“KSES”来看,KSES代表“KSES去除邪恶的脚本!”KSES模块显然是一种安全措施。如果潜在的恶意代理无权将内容发布到您的站点,则您需要以某种方式禁用KSE,以允许在帖子内容中使用原始“>”字符等。

从代码中可以看出,对于具有unfiltered_html 能力。我无法让它发挥作用;无论我如何尝试授予用户此功能,除了网络超级管理员之外,KSES仍然处于启用状态。也许对用户功能有更深入了解的人可以让这个机制工作。对于我来说,最终,为了允许“<;”在我的帖子中,我被迫在pre_post_content (之前运行content_save_pre) 这会返回未修改的输入值,但作为副作用,它会检查当前用户是否是管理员,如果是,则执行kses_remove_filters() 这将禁用KSE。

结束

相关推荐

是否将ADD_EDITOR_STYLE定义为特定帖子类型?

我想知道是否可以为特定的帖子类型定义add\\u editor\\u样式?目前我正在使用此功能。。// EDITOR STYLE add_editor_style(\'editor-style.css\'); 但我想有多种编辑风格的各种职位类型。所以我猜可能是这样的。。。if ( ... ) { // EDITOR STYLE POSTS & PAGES add_editor_style(\'editor-style.css\'); }