【问题标题】:Sanitize custom checkout fields data in WooCommerce在 WooCommerce 中清理自定义结帐字段数据
【发布时间】:2017-06-19 12:23:41
【问题描述】:

按照 WooCommerce 结帐字段自定义文档:
Customizing checkout fields using actions and filters

我已经通过 functions.php 向 woocommerce 结帐页面添加了一个自定义字段。

我担心是否必须清理该自定义字段的用户输入?

我认为它不需要清理,因为它已传递到帐单字段中,如:$fields['billing'],对吗?

如果不是,我该如何清理这个自定义字段?

创建此自定义字段旨在接受长度不超过 50 的文本字符串(拉丁文)和整数组合。

// Hook in
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {

//Adding custom text field  
 $fields['billing']['billing_username'] = array(
'type' => 'text',
'label'     => __('Your Username', 'woocommerce'),
'placeholder'   => _x('', 'placeholder', 'woocommerce'),
'required'  => true,
'class'     => array('form-row-first'),
'clear'     => true
 );

 return $fields;
}

【问题讨论】:

    标签: php wordpress woocommerce checkout sanitization


    【解决方案1】:

    如果您查看问题中链接的相关官方文档,您会得到这个 sn-p:

    /**
     * Update the order meta with field value
     */
    add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
    
    function my_custom_checkout_field_update_order_meta( $order_id ) {
        if ( ! empty( $_POST['my_field_name'] ) ) {
            update_post_meta( $order_id, 'My Field', sanitize_text_field( $_POST['my_field_name'] ) );
        }
    }
    

    在您的情况下,您不需要它,因为地址字段已由 Woocommerce 处理。

    对于自定义特殊字段:答案是肯定的 (这不是你的情况)

    正如您在这段代码中看到的,他们使用sanitize_text_field() WordPress 函数,当使用update_post_meta() 函数将提交的数据保存到数据库时......

    这仅适用于自定义结帐字段,不适用于现有结帐字段,它们已经拥有自己的流程......

    【讨论】:

    • 我明白,虽然我遵循了文档中的“添加自定义运输和计费字段”部分,而不是遵循“添加自定义特殊字段”部分
    • @t0r 我已经更新了我的答案......在你的地址字段的情况下,你不需要清理数据,因为它已经被 WooCommerce 核心脚本处理......
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-03-21
    • 2013-07-07
    • 2015-12-16
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多