我有一个带有文本区域的自定义元框,用户可以在其中插入vimeo嵌入代码。
我应该在更新\\u post\\u meta之前清理这段代码吗?如果是,我应该怎么做?我不想删除重要信息(如iframe)。。。我只是想确保没有恶意的东西被输入。
我有一个带有文本区域的自定义元框,用户可以在其中插入vimeo嵌入代码。
我应该在更新\\u post\\u meta之前清理这段代码吗?如果是,我应该怎么做?我不想删除重要信息(如iframe)。。。我只是想确保没有恶意的东西被输入。
您需要添加一个自定义验证/清理回调,并将其挂接到publish_post
(和/或draft_post
和/或future_post
, 如适用)。例如:
<?php
function wpse_44807_update_custom_post_meta() {
// Globalize the $post object
global $post;
// If our custom post meta key is set, sanitize it;
// otherwise, return false
$my_post_custom = ( isset( $_POST[\'_my_post_custom\'] ? wp_filter_nohtml_kses( $_POST[\'_my_post_custom\'] ? false );
// Now, delete or update our custom post meta key
if ( false == $my_post_custom ) {
delete_post_meta( $post->ID, \'_my_post_custom\' );
} else {
update_post_meta( $post->ID, \'_my_post_custom\', $my_post_custom );
}
}
add_action( \'publish_post\', \'wpse_44807_update_custom_post_meta\' );
add_action( \'draft_post\', \'wpse_44807_update_custom_post_meta\' );
?>
请注意,我正在使用wp_filter_nohtml_kses()
过滤器,如果您需要视频ID或类似的字母数字,那么这将是合适的。根据预期输入的类型,您对消毒的选择将发生变化。另外:我使用了一个带有下划线前缀的自定义post meta键,如果要为自定义post meta键定义自定义post meta框,那么这是合适的。(下划线前缀从通用的“自定义字段”元框下拉列表中隐藏此元键。)
update_post_meta()
将对其进行清理,以便为您插入数据库。您真正需要注意的是恶意HTML,这会影响输出。为此,您需要一个正则表达式或其他一些与已知/所需格式进行比较的方法。为了解决这个问题,我建议您只接受视频ID或类似的东西,这样您可以严格控制输出的方式,而不是允许用户向您提供iframe等。