Magento – How to display field “VAT Number” during registration

magento-2.1registration

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:

app/design/frontend/{YOUR_PACKAGE}/{YOUR_THEME}/Magento_Customer/templates/form/register.phtml

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>
        </div>
        <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') ?>">
            </div>
        </div>

        <?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>
                            </label>
                            <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 ?>">
                            </div>
                        </div>
                    <?php endfor; ?>
                </div>
            </div>
        </div>

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

        <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>
                </select>
                <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>
        </div>

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

        <div class="field country required">
            <label for="country" class="label"><span><?php /* @escapeNotVerified */ echo __('Country') ?></span></label>
            <div class="control">
                <?php echo $block->getCountryHtmlSelect() ?>
            </div>
        </div>
        <?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">
    </fieldset>

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 ?>

Best Answer

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')) ?>">
            </div>
        </div>

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
Related Topic