如何消毒后的元字段值?

时间:2015-09-03 作者:jay

我为文本输入添加了一个元字段。我想允许一些html标记,例如<strong><i> 例如:<strong>hello</strong> world

我可以保存输入字段值而无需消毒,这样也没有问题:

if( isset( $_POST[\'my_field\'] ) ){
    update_post_meta($post->ID, \'my_field\', $_POST[\'my_field\']);
}   
但是如果我使用sanitize_text_field 功能如下,保存时将删除html标记:

if( isset( $_POST[\'my_field\'] ) ){
    update_post_meta($post->ID, \'my_field\', sanitize_text_field($_POST[\'my_field\']));
}   
在存储之前,用html标记清理值的最佳方法是什么?

1 个回复
SO网友:cybmeta

在我看来,自定义字段中的HTML是一个奇怪的自定义字段用例。如果使用HTML的目的仅仅是外观和感觉(<strong><i> 可以看作只是外观和感觉)。如果在自定义字段输出上使用HTML标记,或者使用CSS应用粗体/斜体样式,效果会更好。

尽管如此,您可以尝试使用PHP strip_tags() function或wp_kses() function. 两者都允许您剥离HTML标记,但允许其中一些标记。示例使用wp_kses():

$allowed_html = array(
    \'i\' => array(),
    \'strong\' => array(),
);

if( isset( $_POST[\'my_field\'] ) ){

    $meta_value = wp_kses( $_POST[\'my_field\'], $allowed_html );

    update_post_meta( $post->ID, \'my_field\', $meta_value );

}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在