我正在尝试将提供的电话号码格式化为" 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;
}
答案 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文件中。测试和工作。