在 Woocommerce 3 中更改订单创建时的默认结帐字段值
Change default checkout field value on order creation in Woocommerce 3
在 Woocommerce 中,我试图将电子邮件和 Phone 输入字段显示为帐单地址部分上方的自定义字段。
这是我做的,但是失败了:
我创建了一些自定义字段并将它们显示在计费部分上方。此外,我将默认的电子邮件和 Phone 字段设置为可选字段,并将它们删除。 Woo 将订单电子邮件作为元数据保存到 wp_postmenta
数据库 table 中。当我保存自定义字段时,我尝试用 $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 );
如您所见,即使我先尝试删除默认元,也会发生重复。
可以使用挂钩和过滤器实现这种自定义,而无需修改数据库中的字段,或者您知道如何覆盖元值吗?
欢迎任何帮助。
由于帐单电子邮件是默认字段而不是自定义结帐字段,您需要使用 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 文件。它应该有效。
在 Woocommerce 中,我试图将电子邮件和 Phone 输入字段显示为帐单地址部分上方的自定义字段。
这是我做的,但是失败了:
我创建了一些自定义字段并将它们显示在计费部分上方。此外,我将默认的电子邮件和 Phone 字段设置为可选字段,并将它们删除。 Woo 将订单电子邮件作为元数据保存到 wp_postmenta
数据库 table 中。当我保存自定义字段时,我尝试用 $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 );
如您所见,即使我先尝试删除默认元,也会发生重复。
可以使用挂钩和过滤器实现这种自定义,而无需修改数据库中的字段,或者您知道如何覆盖元值吗?
欢迎任何帮助。
由于帐单电子邮件是默认字段而不是自定义结帐字段,您需要使用 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 文件。它应该有效。