skip to Main Content

WooCommerce shop.

Setting “Customer can register while checkout” is ON, so customer have to fill his Name, Phone and Email while checkout (on /checkout/ page).

I want to check this data for errors before registration. So, I try to get this data from $_REQUEST variable or from $fields array from filter “woocommerce_after_checkout_validation”, but I can’t do this.

This is how I try:

    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] => 
    )
    */

And this:

    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
    */

Please, help me.

2

Answers


  1. Try This

    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');
    
    
    
    }
    
    Login or Signup to reply.
  2. You can verify phone number using sms service and Ajax

    Past this code in your 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();
    }
    

    Note: You have to integrate variable $flag 0 or 1 with SMS service where you can verify the phone numberĀ 

    If $flag = 0;
    https://prnt.sc/rbwxhg

    IF $flag = 1;
    https://prnt.sc/rbwx1w

    I think this is helpful for you

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search