Php 在Woocommerce中提交结账表时设置帐单电话号码的格式

Php 在Woocommerce中提交结账表时设置帐单电话号码的格式,php,wordpress,woocommerce,checkout,orders,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

当客户点击提交按钮时,我正在尝试将提供的电话号码格式化为“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;
}
add_action('woocommerce_checkout_update_order_meta',
“formatPhoneOnComplete”,10,2);
函数formatPhoneOnComplete($order\u id){
$order=wc\u get\u order($order\u id);
$order_data=$order->get_data();
$phone=$order_data['billing']['phone'];
$phone=trim($phone);
$phone=str_replace(['','','','','','','',$phone);
如果(空($phone)){
返回NULL;
}
$phone=ltrim(ltrim($phone,'0'),'+');

如果(strlen($phone)尝试以下操作,因为您的代码实际上并没有在数据库中保存任何内容,因为返回格式化值在操作挂钩中不是正确的方式

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;
}
woocommerce\u checkout\u create\u order
操作钩子是
woocommerce\u checkout\u update\u order\u meta
钩子的一个更好的选择

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;
}
我已在以下挂钩函数中重用您的格式化代码:

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;
}
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 );
    }
}
add_action('woocommerce_checkout_create_order','addition_hidden_checkout_field_save',20,2);
函数附加\隐藏\签出\字段\保存($order$data){
如果(!isset($data['billing_phone'])返回;
如果(!空($data['billing_phone'])){
$phone=str_replace(['','','',['',''),$data['billing_phone']);
$phone=ltrim(ltrim($phone,'0'),'+');
$formatted\u phone=strlen($phone)set\u billing\u phone($formatted\u phone);
}
}
代码放在活动子主题(或活动主题)的function.php文件中。已测试并运行

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;
}