首页 文章

在Woocommerce 3中更改订单创建时的默认结帐字段值

提问于
浏览
1

在Woocommerce中,我尝试将电子邮件和电话输入字段显示为帐单邮寄地址部分上方的自定义字段 .

This is what I did, but failed:
我创建了一些自定义字段并将其显示在结算部分上方 . 此外,我将默认的电子邮件和电话字段设置为可选,并将其删除 . Woo将订单电子邮件作为元数据保存到 wp_postmenta 数据库表中 . 当我保存自定义字段时,我尝试用 $order->update_meta_data() 函数覆盖这些元值,但不是覆盖它而是创建一个具有相同meta_key的新元数据 .

function save_extra_checkout_fields( $order, $data ){
if( isset( $data['some_field'] ) ) {
    $order->delete_meta_data('_billing_email');
    $order->update_meta_data( '_billing_email', sanitize_email( $data['some_field'] ) );
    }
}
add_action( 'woocommerce_checkout_create_order', 'save_extra_checkout_fields', 10, 2 );

enter image description here

正如您所看到的,即使我尝试删除默认元,也会发生重复 .

使用钩子和过滤器可以实现这种自定义而不会破坏数据库中的字段,或者您是否知道如何覆盖元值?

欢迎任何帮助 .

1 回答

  • 0

    由于结算电子邮件是默认字段而非自定义结帐字段,因此您需要使用set_billing_email() WC_Order method更改代码:

    add_action( 'woocommerce_checkout_create_order', 'change_billing_email_checkout_field_value', 10, 2 );
    function change_billing_email_checkout_field_value( $order, $data ){
        if( isset( $data['some_field'] ) && ! empty( $data['some_field'] ) ) 
            $order->set_billing_email( sanitize_email( $data['some_field'] ) );
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 . 它应该工作 .

相关问题