WooCommerce实现_billing_address值自动填充至_billing_address_2的方法问询
WooCommerce 账单地址1自动同步到账单地址2实现方案
完全可以通过代码实现该需求,你现有代码存在几个明显问题:
- 钩子选择错误:
woocommerce_payment_complete是支付完成后才触发的钩子,无法实现填写时同步的需求,且逻辑时序不符合要求 - 变量逻辑颠倒:代码中未定义
$_billing_address_2变量,同时把地址1的值覆盖为地址2,和你的需求完全相反 - 字段调用方法错误:WC_Order对象获取字段需要用官方提供的getter方法,不能直接以下划线开头调用属性
实现方案分两种,可按需选择:
方案1:前端实时同步(用户填写时自动填充,体验最优)
在主题的自定义JS区域添加以下代码即可实现填写账单地址1时,自动把值同步到账单地址2输入框:
jQuery(document).ready(function($){ // 监听账单地址1输入事件 $('input#billing_address_1').on('input change', function(){ $('input#billing_address_2').val($(this).val()); }); });
如果要适配结算页动态刷新的特性,可以把事件绑定改成委托形式:
jQuery(document).ready(function($){ $(document).on('input change', 'input#billing_address_1', function(){ $('input#billing_address_2').val($(this).val()); }); });
方案2:后端强制同步(提交订单时自动赋值,逻辑最稳妥)
如果不需要前端实时显示,只需要订单保存后两个字段值一致,可以把以下代码加到主题的functions.php文件中:
add_action('woocommerce_checkout_create_order', 'sync_billing_address1_to_address2', 10, 2); function sync_billing_address1_to_address2($order, $data) { // 获取账单地址1的值 $billing_address_1 = $order->get_billing_address_1(); // 赋值给账单地址2 $order->set_billing_address_2($billing_address_1); // 不需要手动调用save,钩子触发后会自动保存订单数据 }
如果需要兼容旧版本WooCommerce,也可以用post meta方式实现:
add_action('woocommerce_checkout_update_order_meta', 'sync_billing_address_meta', 10, 1); function sync_billing_address_meta($order_id) { $address1 = get_post_meta($order_id, '_billing_address_1', true); update_post_meta($order_id, '_billing_address_2', $address1); }
内容的提问来源于stack exchange,提问作者Laurapnunez
相关产品推荐
相关产品推荐

