How to Add WooCommerce VAT Number Checkout Page

WooCommerce VAT Number CheckoutDo you want to add a VAT number field on the WooCommerce checkout page? WooCommerce does not have built-in functionality to add a VAT number field. However, I have created a custom PHP script that will add a VAT field on the checkout page and my account page.

WooCommerce VAT Number Checkout

Selling products in the European Union is very specific, mostly because of the legal aspects. However, WooCommerce sometimes does not take that into account, so it is necessary to adjust the store to the European conditions.

It is essential that your store should support the VAT identification number for issuing an invoice. In this tutorial, you will learn how to add a VAT field on the checkout page.

Steps to Add a VAT field on the Checkout Page

Here are the steps you need to follow:

  1. Log into your WordPress site and access the dashboard as the admin user.
  2. From the dashboard menu, click on the Appearance Menu > Theme Editor Menu. When the theme editor page is opened, look for the theme functions file with the extension functions.php. Open this functions file to add the function to add a VAT field on the checkout page.
  3. Add the following code to the functions.php file:
/*****************************  FRONTEND  ****************************************/

/**************************

Filter to add a VAT field to:
- My Account - Edit Form -- Billing fields
- Checkout - Edit Form - Billing Fields
This function is also reordering the form fields.
***************************/

function add_woocommerce_billing_fields($billing_fields){

            //reorder woo my billing address form fields
            $billing_fields2['billing_first_name'] = $billing_fields['billing_first_name'];
            $billing_fields2['billing_last_name'] = $billing_fields['billing_last_name'];

            $billing_fields2['billing_vat'] = array(
                        'type' => 'text',
                        'label' =>  __('VAT number',  'keyelp-shop-customization' ),
                        'class' => array('form-row-wide'),
                        'required' => false,
                        'clear' => true
            );
                
            $merged_billing_fields =  $billing_fields2 + $billing_fields;


            return $merged_billing_fields;

}

add_filter('woocommerce_billing_fields' , 'add_woocommerce_billing_fields');


/*********
Filters to add VAT when printing billing address on:
- (1) My account 
- (2) Checkout - Order Received (after checkout completion),
+++ Additional filters to format the printed output.
********/

// (1) Printing the Billing Address on My Account

add_filter( 'woocommerce_my_account_my_address_formatted_address', 'njengah_my_account_my_address_formatted_address', 10, 3 );

function njengah_my_account_my_address_formatted_address( $fields, $customer_id, $type ) {

            if ( $type == 'billing' ) {
                        $fields['vat'] = get_user_meta( $customer_id, 'billing_vat', true );
            }
            return $fields;
}


// (2) Checkout -- Order Received (printed after having completed checkout)

add_filter( 'woocommerce_order_formatted_billing_address', 'njengah_add_vat_formatted_billing_address', 10, 2 );

function njengah_add_vat_formatted_billing_address( $fields, $order ) {

            $fields['vat'] = $order->billing_vat;

            return $fields;

}



// Creating merger VAT variables for printing formatting

add_filter( 'woocommerce_formatted_address_replacements', 'njengah_formatted_address_replacements', 10, 2 );

function njengah_formatted_address_replacements( $address, $args ) {

            $address['{vat}'] = '';
            $address['{vat_upper}']= '';

            if ( ! empty( $args['vat'] ) ) {
                        $address['{vat}'] = $args['vat'];
                        $address['{vat_upper}'] = strtoupper($args['vat']);
            }

            return $address;

}


//Defining the Spanish formatting to print the address, including VAT.

add_filter( 'woocommerce_localisation_address_formats', 'njengah_localisation_address_format' );

function njengah_localisation_address_format( $formats ) {

            $formats['ES'] = "{name}\n{company}\n{vat_upper}\n{address_1}\n{address_2}\n{postcode} {city}\n{state}\n{country}";

            return $formats;

}


/*****************************  ADMIN USER PROFILE PAGE  ****************************************/

/***************

Filter to add VAT Customer meta fields (user profile field on the billing address grouping)

*****************/

add_filter( 'woocommerce_customer_meta_fields', 'njengah_customer_meta_fields' );

function njengah_customer_meta_fields( $fields ) {

            $fields['billing']['fields']['billing_vat'] = array(

                        'label'       => __( 'VAT number', 'njengah' )

            );


            return $fields;

}


/***************************  ADMIN ORDER PAGE  ****************************************/


/********* 

Filter to add VAT to the Edit Form on Order --  Admin page

*********/

add_filter( 'woocommerce_admin_billing_fields', 'njengah_admin_billing_fields' );

function njengah_admin_billing_fields( $fields ) {

            $fields['vat'] = array(
                        'label' => __( 'VAT number', 'njengah' ),
                        'show'  => true
            );

            return $fields;

}

/****************

Filter to copy the VAT field from User meta fields to the Order Admin form (after clicking the dedicated button on the admin page)

******************/


add_filter( 'woocommerce_found_customer_details', 'njengah_found_customer_details' );

function njengah_found_customer_details( $customer_data ) {

            $customer_data['billing_vat'] = get_user_meta( $_POST['user_id'], 'billing_vat', true );

            return $customer_data;

}
  1. This is the outcome on the front end:VAT checkout field
  2. This is the outcome on the admin side:VAT number

Conclusion

In summary, you have learned how to add a VAT number checkout field on the WooCommerce checkout page. I recommend adding the code snippets on the functions.php file of your child theme so that changes you make will not be lost during an update. The code snippet automatically displays the VAT Number on the issued invoices.

Similar Articles