我正在使用的自定义实例wp_editor();
允许对与Post对象关联的Post Meta进行富文本编辑。
我想执行与post_content
这些字段的值。
Here\'s what I\'ve come up with:
请让我知道这是否是一种可行的方法,或者在这三个步骤中我是否应该做更多的工作,或者是否有更好或更简单的方法。
On save_post
:
$value = wp_filter_post_kses( sanitize_post_field( \'post_content\', $value, 0, \'db\' ) );
Passing Value to wp_editor();
:
$value = wp_unslash( sanitize_post_field( \'post_content\', $value, 0, \'edit\' ) );
Outputting Value on Frontend:
$value = wp_unslash( sanitize_post_field( \'post_content\', $value, 0, \'display\' ) );
最合适的回答,由SO网友:Tom J Nowell 整理而成
wp_kses
救命啊!
我的编辑器包含帖子可能传递结果的所有内容wp_kses_post
在进出的路上,一切都应该很好。
记住,这将删除the_content
过滤器,以便保留oEmbed和shortcode,请使用以下选项:
echo apply_filters( \'the_content\', wp_kses_post( $content ) );
您可能还想要
esc_textarea
用于在使用
<textarea>
直接标记
“我的编辑器”包含文本,但在输出上没有标记,esc_html
是你的朋友。当您的文本区域永远不包含标记时,请使用此选项。输入时,请尝试wp_strip_all_tags
输入时进行消毒。其他WP API将确保不会发生SQL注入
“我的编辑器”包含标记,但只有有限的子集
wp_kses
为了营救,把它传过去
wp_kses
除了第二个参数外,还有一个数组,定义允许使用哪些标记和属性。E、 g.:
$allowed = [
\'a\' => [
\'href\' => [],
\'title\' => []
],
\'br\' => [],
\'em\' => [],
\'strong\' => [],
];
echo wp_kses( $content, $allowed );
但要警惕过度扩张。如果添加script和iframe标记,那么使用
wp_kses
?
wp\\U编辑器
wp_editor
在内部输出时,它不能被转义,因此它自己负责转义。不要试图通过传递预先转义的内容来帮助它,这可能会导致输出损坏和双重转义(对于格式错误的内容来说,这是绕过转义的一种很好的方法)。
输出的函数负责转义。这将启用延迟转义。提前或多次逃跑是危险的,并且会带来新的复杂问题,因为你不再确切知道什么是逃脱还是没有逃脱。
SO网友:Howdy_McGee
我认为你走对了方向。
这个sanitize_post_field()
函数调用content_save_pre
钩子,当给定DB上下文时,它还将调用wp_filter_post_kses
function 因此,无需再包装/调用它。
据我所知,一旦它被保存到数据库中,我们就不需要取消显示任何内容。以下是我所拥有的与您已经拥有的非常相似的内容:
Saving Value
update_post_meta( $post->ID, \'_test\', sanitize_post_field( \'post_content\', $_POST[\'_test\'], $post->ID, \'db\' ) );
Passing Value
$editor_content = get_post_meta( $post->ID, \'_test\', true );
wp_editor( $editor_content, \'editor_id_here\', array(
\'textarea_name\' => \'_test\',
) );
Displaying Value
$editor_content = get_post_meta( $post->ID, \'_test\', true );
$display_content = apply_filters( \'the_content\', $display_content );