首先。假设$_POST['enablog_post_options'] 是一个数组,它应该作为一个数组进行清理,在循环中迭代每个元素。不是作为字符串,一次是所有元素。
因此,请查看您的 enablog_post_options 数组并为每个元素确定一种与数据类型相关的清理技术。 WP Codex 可以帮助开始。
现在。当您了解您真正要清理的数据类型时,我怀疑值得一提的是 update_post_meta() 内置清理操作和自定义过滤器,您可以挂接到该函数。
因此,任何人都可以查找为update_post_meta() here in the Core Metadata API source code 完成繁重工作的update_metadata() 函数的代码。
但与此同时,它会消毒:
- 带有
sanitize_key() 和wp_unslash() 的元键;
- 带有
wp_unslash() 和sanitize_meta() 的元值(后面有更多解释)。
- 从
update_metadata()调用wpdb::prepare()的数据库保存查询->wpdb::update();
使用sanitize_meta()进行消毒。
另外清理 [自定义] 帖子元数据的便捷方法是通过 sanitize_meta()。 update_metadata() 已经将您必须创建的潜在现有自定义清理过滤器连接到元字段清理过程中。这是通过sanitize_meta() 完成的。
它是从update_metadata() 调用的,带有您所有的帖子元参数:
$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
因此,您可以像这样制作一个自定义清理过滤器来处理您的帖子元数据(来自 WP Codex sanitize_meta() 描述的示例,上面的链接):
// --- sanitize_meta() call is commented out because it is called from update_metadata()
// $clean_value = sanitize_meta( 'birth-year', $user_input, 'user' );
function sanitize_birth_year_meta( $year ) {
$now = date( 'Y' );
$then = $now - 115; // No users older than 115.
if ( $then > $year || $year > $now ) {
wp_die( 'Invalid entry, go back and try again.' );
}
return $year;
}
add_filter( 'sanitize_user_meta_birth-year', 'sanitize_birth_year_meta' );
继续使用一些虚构的代码,在 sanitize_birth_year_meta() 而不是 $year 中,您将在调用过滤器时获得您的 $data 内容进行清理。