如何解决如何使用先前输入的值填充自定义结帐字段,例如默认的 WooCommerce 结帐字段?
add_action( 'woocommerce_before_order_notes','bbloomer_add_custom_checkout_field' );
function bbloomer_add_custom_checkout_field( $checkout ) {
$current_user = wp_get_current_user();
$saved_gst_no = $current_user->gst_no;
woocommerce_form_field( 'gst_no',array(
'type' => 'text','class' => array( 'form-row-wide' ),'label' => 'GST Number','placeholder' => 'GST Number','required' => true
//'default' => $saved_gst_no,),$checkout->get_value( 'gst_no' ) );
}
在 GST Number 字段中输入任何值 (自定义结帐字段),然后通过单击“下订单”按钮转到付款屏幕并在未完成交易的情况下返回结帐页面,所有默认 woocommerce 字段帐单电话、电子邮件等都是从会话中自动填充的。
但是,通过上述代码添加的自定义字段始终为空。如何在访客用户的自定义字段中自动填充先前输入的值,类似于自动填充默认 woocommerce 字段的方式?
解决方法
更新 (在第一个函数中用 WC_Session
替换了错误的 set()
方法 get()
)
这也适用于访客用户。将您的代码替换为:
// Display checkout custom field
add_action( 'woocommerce_before_order_notes','add_custom_checkout_field' );
function add_custom_checkout_field( $checkout ) {
$key_field = 'gst_no';
woocommerce_form_field( $key_field,array(
'type' => 'text','class' => array( 'form-row-wide' ),'label' => __('GST Number'),'placeholder' => __('GST Number'),'required' => true
//'default' => $saved_gst_no,),$checkout->get_value($key_field) ? $checkout->get_value($key_field) : WC()->session->get($key_field) );
}
// Save checkout custom field value in a WC_Session variable
add_action( 'woocommerce_checkout_create_order','action_checkout_create_order',10,2 );
function action_checkout_create_order( $order,$data ) {
$key_field = 'gst_no';
if( isset($_POST[$key_field]) ) {
WC()->session->set($key_field,sanitize_text_field($_POST[$key_field]));
}
}
// Save checkout custom field value as user meta data
add_action( 'woocommerce_checkout_update_customer','action_checkout_update_customer',2 );
function action_checkout_update_customer( $customer,$data ) {
$key_field = $key_field;
if( isset($_POST['gst_no']) ) {
$customer->update_meta_data($key_field,sanitize_text_field($_POST[$key_field]));
}
}
注意:使用 WC_Session 变量存储客人提交的值,允许在未完成交易的情况下返回时在结账时显示该值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。