Source taken from: https://magento.stackexchange.com/questions/163408/how-to-change-the-order-of-the-billing-address-fields-on-checkout-page-in-magent
Here is an example (using Plugin) for changing field order, disabling field or adding missing field to address.
Here is an example (using Plugin) for changing field order, disabling field or adding missing field to address.
File: etc/di.xml
<type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
<plugin disabled="false" name="Vendor_Module_Plugin_Block_Checkout_LayoutProcessor" sortOrder="99"
type="Vendor\Module\Plugin\Block\Checkout\LayoutProcessor"/>
</type>
File: Plugin/Block/Checkout/LayoutProcessor.php
<?php
namespace Vendor\Module\Plugin\Block\Checkout;
use Magento\Checkout\Block\Checkout\LayoutProcessor as MageLayoutProcessor;
class LayoutProcessor
{
public function afterProcess(MageLayoutProcessor $subject, $jsLayout)
{
/* config: checkout/options/display_billing_address_on = payment_method */
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children']
)) {
foreach ($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'] as $key => $payment) {
/* company */
if (isset($payment['children']['form-fields']['children']['company'])) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['company']['sortOrder'] = 0;
}
/* region & region_id */
if (isset($payment['children']['form-fields']['children']['region'])) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['region']['visible'] = false;
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['region']['config']['componentDisabled'] = true;
}
if (isset($payment['children']['form-fields']['children']['region_id'])) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['region_id']['visible'] = false;
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['region_id']['config']['componentDisabled'] = true;
}
$method = substr($key, 0, -5);
/* vat_id */
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['payments-list']['children'][$key]['children']['form-fields']['children']
['vat_id'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'billingAddress' . $method,
'customEntry' => null,
'template' => 'ui/form/field',
'elementTmpl' => 'ui/form/element/input',
'tooltip' => null,
],
'dataScope' => 'billingAddress' . $method . '.vat_id',
'dataScopePrefix' => 'billingAddress' . $method,
'label' => __('VAT number'),
'provider' => 'checkoutProvider',
'sortOrder' => 1,
'validation' => [],
'options' => [],
'filterBy' => null,
'customEntry' => null,
'visible' => true,
];
}
}
/* config: checkout/options/display_billing_address_on = payment_page */
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']
)) {
/* company */
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['company']
)) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['company']['sortOrder'] = 0;
}
/* region & region_id */
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region'])) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region']['visible'] = false;
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region']['config']['componentDisabled'] = true;
}
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region_id'])) {
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region_id']['visible'] = false;
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['region_id']['config']['componentDisabled'] = true;
}
$method = 'shared';
/* vat_id */
$jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
['payment']['children']['afterMethods']['children']['billing-address-form']['children']['form-fields']
['children']['vat_id'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'billingAddress' . $method,
'customEntry' => null,
'template' => 'ui/form/field',
'elementTmpl' => 'ui/form/element/input',
'tooltip' => null,
],
'dataScope' => 'billingAddress' . $method . '.vat_id',
'dataScopePrefix' => 'billingAddress' . $method,
'label' => __('VAT number'),
'provider' => 'checkoutProvider',
'sortOrder' => 1,
'validation' => [],
'options' => [],
'filterBy' => null,
'customEntry' => null,
'visible' => true,
];
}
return $jsLayout;
}
}