WordPress在保存之前会清理数据update_post_meta


Wordpress sanitize data before saving with update_post_meta

我正在尝试为我的新 WordPress 模板创建帖子选项,但我不知道如何在保存之前清理或验证我的自定义帖子元数据:

$data = $_POST['enablog_post_options'];
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data ); 

所有选项(YouTube URL,文本,复选框和单选按钮(都使用我唯一的元键enablog_post_options保存。

更新:

sanitize_text_field()损坏了我的所有代码(保存帖子时会选中所有复选框(,恕我直言,我需要的不仅仅是sanitize_text_field(),因为$_POST['enablog_post_options']有复选框、文本字段等。

首先。假设$_POST['enablog_post_options']是一个数组,它应该被清理为一个数组,在循环中迭代每个元素。不是字符串,一次所有元素。

因此,请查找您的enablog_post_options数组,并为每个元素确定一个依赖于数据类型的清理技术。WP Codex可以帮助从它开始

现在。当您了解真正要清理的数据类型时,我怀疑值得一提的是您可以挂接到该功能的update_post_meta()内置清理操作和自定义过滤器。

因此,任何人都可以在核心元数据 API 源代码中查找update_metadata()函数的代码,该函数为update_post_meta()

重的工作。

但与此同时,它会消毒:

  • 带有sanitize_key()wp_unslash()的元键;
  • 带有 wp_unslash()sanitize_meta() 的元值(有关此的更多解释如下(。
  • update_metadata() -> wpdb::update() 调用wpdb::prepare()数据库保存查询;

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内容以进行清理。

WordPress标准建议对每个全局_GET_POST变量使用wp_unslash(),然后根据您的需要使用任何清理功能。

$data = sanitize_text_field( wp_unslash( $_POST['enablog_post_options'] ) );
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data ); 

使用它来清理您的数据:

$data = sanitize_text_field( $_POST['enablog_post_options'] );
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data ); 

查看关于验证清理和转义用户数据的法典