Как я могу получить регистрационные переменные WooCommerce Checkout?

WooCommerce магазин.

Настройка «Клиент может зарегистрироваться во время оформления заказа» включена, поэтому клиент должен указать свое имя, телефон и адрес электронной почты во время оформления заказа (на странице /checkout/).

Я хочу проверить эти данные на наличие ошибок перед регистрацией. Итак, я пытаюсь получить эти данные из переменной $_REQUEST или из массива $fields из фильтра «woocommerce_after_checkout_validation», но не могу этого сделать.

Вот как я пытаюсь:

    add_action( 'woocommerce_before_checkout_registration_form', 'check_request', 1 );
    function check_request () {
        echo '<pre>'; print_r($_REQUEST); echo '</pre>';
    }

    /* OUTPUT:
    Array
    (
        [woocommerce-login-nonce] => 
        [_wpnonce] => 
        [woocommerce-reset-password-nonce] => 
        [woocommerce-edit-address-nonce] => 
        [save-account-details-nonce] => 
    )
    */

И это:

    add_filter( 'woocommerce_after_checkout_validation', 'custom_after_checkout_validation', 10, 2);
    function custom_after_checkout_validation ($fields, $errors){

        if ( empty( $fields['billing_phone'] ) ) {
            $errors->add( 'phone validation', 'Phone is empty' );
        }
    }
    /* OUTPUT:
    Phone is empty
    */

Помогите пожалуйста мне.


person Viktor    schedule 28.02.2020    source источник


Ответы (2)


Попробуй это

add_action('woocommerce_checkout_process', 'customise_checkout_field_process');
function customise_checkout_field_process()
{


  // if the field is set, if not then show an error message.
  if (!$_POST['billing_phone']) wc_add_notice(__('Please enter phone.') , 'error');



}
person gaurav sharma    schedule 02.03.2020
comment
Спасибо. Это работает для проверки полей, но я хочу изменить их или получить вывод на экран. Я хочу изменить одно поле html-формы на другое. Например, я хочу проверить телефон пользователя, отправив ему SMS. Итак, мой план: 1. Получить телефон из поля PHONE 2. Отправить SMS на этот телефон 3. Установить переменную $_SESSION 'SMS_SENT' 4. Изменить поле телефона на поле SMS 5. Проверить SMS из поля SMS С этим add_action я не могу ничего не делать - я не могу установить или получить - person Viktor; 04.03.2020
comment
Вы можете подтвердить номер телефона с помощью SMS-сервиса и Ajax. Примечание: Вы должны интегрировать переменную $flag 0 или 1 с SMS-сервисом, где вы можете проверить номер телефона. Если $flag = 0; prnt.sc/rbwxhg, ЕСЛИ $flag = 1; prnt.sc/rbwx1w Я думаю, что это полезно для вас Пожалуйста, проверьте мой пост еще раз Я разместил новый код для вас . - person gaurav sharma; 05.03.2020

Вы можете подтвердить номер телефона с помощью смс-сервиса и Ajax

Вставьте этот код в свой functions.php

add_action('wp_footer', 'verify_phone_no_wp_footer');
function verify_phone_no_wp_footer(){

    if (is_checkout()) {

        ?>
        <script type="text/javascript">
            jQuery(document).ready(function(){

                jQuery('#billing_phone').after('<div id="verify_phone_no_loader" style="display:none;">Loading..</div>');

                jQuery('#billing_phone').after('<div id="verify_phone_msg"></div>');

                jQuery(document).on('change', '#billing_phone', function(){

                    var target = jQuery(this);

                    var phone_no = target.val();

                    var message = '';

                    var phone_no_r = '';

                    var flag = '';

                    //Ajax
                    jQuery.ajax({
                        url: '<?php echo admin_url( 'admin-ajax.php');?>',
                        type: "POST",
                        data: {'action': 'verify_phone_no_my_action', phone_no: phone_no},
                        cache: false,
                        dataType: 'json',
                        beforeSend: function(){

                            jQuery('#verify_phone_no_loader').show();
                        },
                        complete: function(){

                            jQuery('#verify_phone_no_loader').hide();
                        },
                        success: function (response) { 

                            console.log(response);
                            console.log(response['message']);
                            console.log(response['phone_no']);
                            console.log(response['flag']);

                            message = response['message'];

                            phone_no_e = response['phone_no'];

                            flag = response['flag'];

                            if (flag == 1) {
                                jQuery('#verify_phone_msg').html('<span style="color:green">'+message+'</span>');
                            }else{
                                jQuery('#verify_phone_msg').html('<span style="color:red">'+message+'</span>');
                            }


                        }
                    });
                    //Ajax


                });

            });
        </script>
        <?php

    }

}


add_action( 'wp_ajax_verify_phone_no_my_action', 'verify_phone_no_my_action_function');
add_action( 'wp_ajax_nopriv_verify_phone_no_my_action', 'verify_phone_no_my_action_function');
function verify_phone_no_my_action_function(){

    $phone_no = $_POST['phone_no'];


    //Note: Here you have to add msg service to check the phone is valid or not


    //Also, I have written the temporary condition so that you can understand how to handle it

    $flag = 0;

    if ($flag) { //If flag is '1' phone number is valide

        $myArr = array(
            'message' => 'phone number is valide',
            'phone_no' => $phone_no,
            'flag' => $flag
        );

    }else{ //If flag is 'o' phone number is not valide 

        $myArr = array(
            'message' => 'phone number is not valide',
            'phone_no' => $phone_no,
            'flag' => $flag
        );

    }


    $myJSON = json_encode($myArr); 
    echo $myJSON;
    die();
}

Примечание. Вы должны интегрировать переменную $flag 0 или 1 с сервисом SMS, где вы можете проверить номер телефона.

Если $флаг = 0; https://prnt.sc/rbwxhg

ЕСЛИ $флаг = 1; https://prnt.sc/rbwx1w

Я думаю, это полезно для вас

person gaurav sharma    schedule 05.03.2020