How to display field "VAT Number" (required) during registration.

This field is visible when editing the user from the administration panel. Only how to display them during registration? enter image description here

I found code in:


This file contains fields that are displayed during registration:

            <input type="hidden" name="create_address" value="1" />
        <div class="field company">
            <label for="company" class="label"><span><?php /* @escapeNotVerified */ echo __('Company') ?></span></label>
            <div class="control">
                <input type="text" name="company" id="company" value="<?php echo $block->escapeHtml($block->getFormData()->getCompany()) ?>" title="<?php /* @escapeNotVerified */ echo __('Company') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>">
        <div class="field telephone">
            <label for="telephone" class="label"><span><?php /* @escapeNotVerified */ echo __('Phone Number') ?></span></label>
            <div class="control">
                <input type="text" name="telephone" id="telephone" value="<?php echo $block->escapeHtml($block->getFormData()->getTelephone()) ?>" title="<?php /* @escapeNotVerified */ echo __('Phone Number') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>">

        <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?>

        <div class="field street required">
            <label for="street_1" class="label"><span><?php /* @escapeNotVerified */ echo __('Street Address') ?></span></label>
            <div class="control">
                <input type="text" name="street[]" value="<?php echo $block->escapeHtml($block->getFormData()->getStreet(0)) ?>" title="<?php /* @escapeNotVerified */ echo __('Street Address') ?>" id="street_1" class="input-text <?php /* @escapeNotVerified */ echo $_streetValidationClass ?>">
                <div class="nested">
                    <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
                    <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?>
                        <div class="field additional">
                            <label class="label" for="street_<?php /* @escapeNotVerified */ echo $_i ?>">
                                <span><?php /* @escapeNotVerified */ echo __('Address') ?></span>
                            <div class="control">
                                <input type="text" name="street[]" value="<?php echo $block->escapeHtml($block->getFormData()->getStreetLine($_i - 1)) ?>" title="<?php /* @escapeNotVerified */ echo __('Street Address %1', $_i) ?>" id="street_<?php /* @escapeNotVerified */ echo $_i ?>" class="input-text <?php /* @escapeNotVerified */ echo $_streetValidationClass ?>">
                    <?php endfor; ?>

        <div class="field required">
            <label for="city" class="label"><span><?php /* @escapeNotVerified */ echo __('City') ?></span></label>
            <div class="control">
                <input type="text" name="city" value="<?php echo $block->escapeHtml($block->getFormData()->getCity()) ?>" title="<?php /* @escapeNotVerified */ echo __('City') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="city">

        <div class="field region required">
            <label for="region_id" class="label"><span><?php /* @escapeNotVerified */ echo __('State/Province') ?></span></label>
            <div class="control">
                <select id="region_id" name="region_id" title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="validate-select" style="display:none;">
                    <option value=""><?php /* @escapeNotVerified */ echo __('Please select a region, state or province.') ?></option>
                <input type="text" id="region" name="region" value="<?php echo $block->escapeHtml($block->getRegion()) ?>" title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;">

        <div class="field zip required">
            <label for="zip" class="label"><span><?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?></span></label>
            <div class="control">
                <input type="text" name="postcode" value="<?php echo $block->escapeHtml($block->getFormData()->getPostcode()) ?>" title="<?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?>" id="zip" class="input-text validate-zip-international <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>">

        <div class="field country required">
            <label for="country" class="label"><span><?php /* @escapeNotVerified */ echo __('Country') ?></span></label>
            <div class="control">
                <?php echo $block->getCountryHtmlSelect() ?>
        <?php $addressAttributes = $block->getChildBlock('customer_form_address_user_attributes');?>
        <?php if ($addressAttributes): ?>
            <?php $addressAttributes->setEntityType('customer_address'); ?>
            <?php $addressAttributes->setFieldIdFormat('address:%1$s')->setFieldNameFormat('address[%1$s]');?>
            <?php $block->restoreSessionData($addressAttributes->getMetadataForm(), 'address');?>
            <?php echo $addressAttributes->setShowContainer(false)->toHtml()?>
        <?php endif;?>
        <input type="hidden" name="default_billing" value="1">
        <input type="hidden" name="default_shipping" value="1">

I also found this code in this file:

<?php $_taxvat = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?>
    <?php if ($_taxvat->isEnabled()): ?>
        <?php echo $_taxvat->setTaxvat($block->getFormData()->getTaxvat())->toHtml() ?>
    <<?php endif ?>

2 Answers 2


To use that field at customer registration, you need to enable all the other address fields and then add a addtional field for "vat_id" to /vendor/magento/module-customer/view/frontend/templates/form/register.phtml.

Then you need to add validation if you want the field to be required.

In the phtml file there is <?php if ($block->getShowAddressFields()): ?> change this to <?php if (true): ?> to show the address fields.

Then add a new field:

<div class="field vat_id required">
            <label for="vat_id" class="label"><span><?= $block->escapeHtml(__('VAT Number')) ?></span></label>
            <div class="control">
                <input type="text" name="vat_id" value="<?= $block->escapeHtmlAttr($block->getFormData()->getVatId()) ?>" title="<?= $block->escapeHtmlAttr(__('VAT Number')) ?>" id="vat_id" class="input-text required <?= $block->escapeHtmlAttr($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('vat_id')) ?>">

Of course you should use an own template file (in your theme or module) for this, instead of the core file.

Another possibility is https://www.geissweb.de/eu-vat-enhanced-for-magento-2.html which has a config option to show the address fields and the VAT number field at customer registration. You can also add validation to the field with the module, its options are:

  • Optional
  • Optional, but require a valid VAT number when filled
  • Require a valid VAT number, validated through the validation service
  1. In the admin, navigate to:
    • Stores > Settings > Configuration > Customers > Customer Configuration > Name and Address Options
  2. Set the following configuration:
    • Show Tax/Vat Number: Required
  3. Clear cache
  4. On frontend, navigate to customer registration page

Customer Registration Page - Tax/Vat Number Field Required

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.