Отформатируйте номер телефона для выставления счета при отправке формы заказа в Woocommerce - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь отформатировать предоставленный номер телефона в формате "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 голосов
/ 14 мая 2018

Попробуйте следующее, так как ваш код ничего не сохраняет в базе данных, поскольку возвращает отформатированное значение, это неправильный путь в хуке действия.

Хук действия woocommerce_checkout_create_order - действительно лучшая альтернативаwoocommerce_checkout_update_order_meta hook…

Я повторно использовал ваш код форматирования в следующей перехваченной функции:

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 вашей активной дочерней темы (или активной темы).проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...