清理`wp_EDITOR();`数据库、编辑和显示的值

时间:2018-04-24 作者:Michael Ecklund

我正在使用的自定义实例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\' ) );

2 个回复
最合适的回答,由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 );

结束

相关推荐

WordPress不随POSTS_PER_PAGE变化的帖子数

我在主页上显示了数千篇帖子。我想控制帖子的数量,所以为此我使用posts_per_page但这对我不起作用。所有其他参数都有效,但posts_per_page 不工作。我在这一页上分页,并且posts_per_page 适用于所有其他分页页面,但不适用于第一页(主页)。因此,出于测试目的,我创建了一个空白模板,它只有一个简单的WordPress循环,没有分页或任何其他只显示文章标题的内容,在这个模板中,我对文章的数量有限制,但是posts_per_page 甚至在此页上也不起作用。我尝试过禁用所有插件,但