Wordpress在使用update_post_meta保存之前清理数据

时间:2016-05-01 18:26:46

标签: php wordpress checkbox sanitize

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

$data = $_POST['enablog_post_options'];

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

所有选项(YouTube网址,文字,复选框和单选按钮)均使用我唯一的元键enablog_post_options保存。

更新

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

3 个答案:

答案 0 :(得分:0)

使用它来清理您的数据:

$data = sanitize_text_field( $_POST['enablog_post_options'] );

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

Validating Sanitizing and Escaping User Data

上查看法典

答案 1 :(得分:0)

WordPress标准建议对每个全局变量使用wp_unslash()($ _POST,$ _ GET等)..之后根据需要使用任何清理功能。

$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 ); 

答案 2 :(得分:0)

首先。假设$_POST['enablog_post_options']是一个数组,它应该作为一个数组进行清理,迭代循环中的每个元素。不是一个字符串,一下子就是所有元素。

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

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

因此,任何人都可以查找update_metadata()函数的代码来完成update_post_meta() here in the Core Metadata API source code的繁重工作。

但与此同时,它消毒了:

  • 包含sanitize_key()wp_unslash();
  • 的元键
  • wp_unslash()sanitize_meta()的元值(后面会对此进行更多解释)。
  • wpdb::prepare()调用update_metadata()的数据库保存查询 - > wpdb::update();

使用sanitize_meta()进行清理。

另外清理[custom] post meta的便捷方法是sanitize_meta()update_metadata()已经将您必须创建的潜在现有自定义清理过滤器挂钩到元字段清理过程中。这是通过sanitize_meta()完成的。

update_metadata()这样调用所有发布元参数:

$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );

因此,你可以制作一个自定义清理过滤器来处理你的post meta(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内容,以便在调用过滤器时进行清理。

相关问题