Я создал пользовательскую форму регистрации, одно из полей проверяется с помощью стороннего API.
Если поле проходит проверку позже, я обновляю_пользователя_мета.
В настоящее время, если поле не проходит проверку, я добавляю ошибку с помощью wc_add_notice ().
Проблема в том, что мне нужно сделать что-то другое, в зависимости от того, не удалось ли это сделать, поскольку данные не прошли проверку или это не удалось, потому что API не работает. У меня есть логика c, чтобы определить, что это за ошибка, я просто не знаю, что с ней делать.
Вот пример моей функции проверки.
function add_registration_validation($username, $email, $validation_errors) {
$billing_npi = sanitize_text_field($_POST['billing_npi']);
if (isset($_POST['billing_npi']) && empty($_POST['billing_npi'])){ // empty
$validation_errors->add('billing_npi_error', __(' NPI is required!', 'woocommerce'));
}else{
// NPI API Validation
$npiURL = 'https://npiregistry.cms.hhs.gov/api/?number=' . $billing_npi . '&version=2.1';
$add_order_response = wp_remote_get($npiURL);
if (is_array($add_order_response) && !is_wp_error($add_order_response)) {
// Failed So Send Error
$json_decoded_add_order_response = json_decode($add_order_response['body']);
if ($json_decoded_add_order_response->result_count < 1) {
$validation_errors->add('billing_npi_error', __(' Your NPI number does not match our records!', 'woocommerce'));
}
}else{
// Failed Because API is down
// holds error msg
// $error_string = $add_order_response->get_error_message();
}
}
...
return $validation_errors;
}
add_action('woocommerce_register_post', 'add_registration_validation', 10, 3);
Вы можете увидеть в комментариях 2 разных типа сбоев.
То, что мне нужно сделать, это ...
Если произойдет сбой, потому что API не работает, я хотите отправить форму как обычно, но создайте флаг, сообщающий мне, что API был недоступен в то время. Я думаю, что мне нужно установить переменную и обновить скрытый ввод, но не могу понять, как это сделать.
Вот как я сохраняю данные.
function add_registration_meta($customer_id) {
if (isset($_POST['billing_npi'])) {
update_user_meta($customer_id, 'billing_npi', sanitize_text_field($_POST['billing_npi']));
}
}
add_action('woocommerce_created_customer', 'add_registration_meta');
Надеюсь в этом есть смысл! Я открыт для любых предложений, спасибо!