在Woocommerce中的Checkout表单提交中格式化结算电话号码

时间:2018-05-14 05:47:50

标签: php wordpress woocommerce checkout orders

我正在尝试将提供的电话号码格式化为" 920001234567"在客户点击提交按钮的那一刻格式化。我希望电话号码以这种格式存储在数据库中。这是我试图使用的代码。它有什么不对?

add_action( 'woocommerce_checkout_update_order_meta', 
  'formatPhoneOnComplete', 10, 2 );
  function formatPhoneOnComplete($order_id) {
  $order = wc_get_order($order_id);
  $order_data = $order->get_data();
  $phone = $order_data['billing']['phone'];
  $phone = trim($phone);
  $phone = str_replace([' ','-','_'],'',$phone);
    if(empty($phone)) {
        return NULL;
    }
    $phone = ltrim(ltrim($phone, '0'),'+');
    if(strlen($phone) <= 11) {
        $phone = '92' . ltrim($phone,0);
    }
    return $phone;
}

1 个答案:

答案 0 :(得分:1)

尝试以下操作,因为您的代码并没有真正保存数据库中的任何内容,因为返回格式化的值,在动作挂钩中不是正确的方法。

woocommerce_checkout_create_order动作挂钩是woocommerce_checkout_update_order_meta挂钩的真正更好的替代方法......

我在以下的钩子函数中重用了你的格式代码:

add_action( 'woocommerce_checkout_create_order', 'additional_hidden_checkout_field_save', 20, 2 );
function additional_hidden_checkout_field_save( $order, $data ) {
    if( ! isset($data['billing_phone']) ) return;

    if( ! empty($data['billing_phone']) ){
        $phone = str_replace([' ','-','_'],['','',''], $data['billing_phone']);
        $phone = ltrim(ltrim($phone, '0'),'+');
        $formatted_phone = strlen($phone) <= 11 ? '92' . ltrim($phone, 0) : $phone;
        // Set the formatted billing phone for the order
        $order->set_billing_phone( $formatted_phone );
    }
}

代码放在活动子主题(或活动主题)的function.php文件中。测试和工作。