Wordpress Подтвердите Billing_Phone в пользовательской области администратора - PullRequest
0 голосов
/ 31 января 2020

В настоящее время у меня есть WordPress / WooCommerce и функция оценки billing_phone (приведена ниже), которая работает в разделе Моя учетная запись -> Сведения об учетной записи, Оформление заказа и т. Д. c. Эта функция сначала проверяет, является ли значение действительным номером телефона, а затем проверяет, существует ли этот номер телефона уже. Это очень важная функция в моем плагине, так как я не могу позволить себе иметь дубликаты.

Мне требуются те же проверки / противовесы, что и во внешнем интерфейсе бэкэнда ... У меня возникают проблемы с поиском наиболее подходящего хука или группы хуков, чтобы я мог проверить поле billing_phone внутри администратора область и 1) Отобразите ошибку, используя сообщение об ошибке, которое вы обычно видите в админке администратора, и 2) Не обновляйте поле и покажите ошибку.

Я пробовал user_profile_update_errors - увы, она только выдает ошибку ПОСЛЕ ТОГО, КАК он обновил мету, и я не могу найти никакой информации о том, как включить проверки в переменную $error. Я также пробовал edit_user_profile_update и show_user_profile, но я не знаю, как добавить ошибки в приведенную ниже функцию.

function user_admin_validate_billing_phone() {

    if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) { 

        if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {

        //  Error: Billing Phone Number is Invalid.

        }

        $existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );

        $current_user = wp_get_current_user();

        if ( !empty( $existing_billing_phone ) ) {

            if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {

            // Error: Billing Phone Number Already Exists.

            }
            else { 
                return;
            }
        }
    }
}

Как уже говорилось, я пробовал следующие хуки:

add_action( 'show_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'edit_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'personal_options_update', 'user_admin_validate_billing_phone' );
add_action( 'edit_user_profile_update', 'user_admin_validate_billing_phone' );
add_action( 'user_profile_update_errors, 'user_admin_validate_billing_phone', 10, 3 );

... однако либо появляется ошибка, а поля все еще изменяются, либо я не знаю, как перенести соответствующую обработку ошибок, например:

$error = new WP_Error();
$error->add( 'error', __( 'Billing Mobile Phone Number already exists.' ) );

Любая помощь или руководство для правильный процесс будет наиболее цениться.

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Пример

function validate_phone_field(&$errors, $update = null, &$user  = null) {
    if ( empty($_POST['billing_phone']) ) {
        $errors->add('empty_phone', '<strong>ERROR</strong>: Please Enter a phone number');
    }
}
add_action( 'user_profile_update_errors', 'validate_phone_field' );
0 голосов
/ 31 января 2020
add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');

function wh_phoneValidateCheckoutFields() {
    $billing_phone = filter_input(INPUT_POST, 'billing_phone');

    if (strlen(trim(preg_replace('/^[6789]\d{9}$/', '', $billing_phone))) > 0) {
        wc_add_notice(__('Invalid <strong>Phone Number</strong>, please check your input.'), 'error');
    }
}

Код входит в функции. php файл вашей активной дочерней темы (или темы). Или также в любом файле плагина PHP.

Обратите внимание: по умолчанию WooCommerce использует поле billing_phone для ввода номера телефона, но если вы настроили его, вы можете заменить billing_phone именем поля.

Надеюсь, это поможет!

0 голосов
/ 31 января 2020

Используйте этот код.

function user_admin_validate_billing_phone() {

    if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) { 

        if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {

        //  Error: Billing Phone Number is Invalid.
            wc_add_notice(__('Billing Phone Number is Invalid.', 'woocommerce'));

        }

        $existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );

        $current_user = wp_get_current_user();

        if ( !empty( $existing_billing_phone ) ) {

            if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {

            // Error: Billing Phone Number Already Exists.
                wc_add_notice(__('Billing Phone Number Already Exists.', 'woocommerce'));

            }
            else { 
                return;
            }
        }
    }
}

Надеюсь, эта помощь.

...