{"id":104861,"date":"2017-12-15T16:04:32","date_gmt":"2017-12-15T16:04:32","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=104861"},"modified":"2024-07-29T13:00:20","modified_gmt":"2024-07-29T13:00:20","slug":"add-billing-address-step-checkout-magento-2","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/","title":{"rendered":"Add Billing Address Step on Checkout Adobe Commerce (Magento 2)"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Here we will learn, How to Add Billing Address Step on Adobe Commerce (Magento 2) Checkout page<\/h3>\n\n\n\n<p><strong>1. Create new file Webkul\/CheckoutCustomization\/view\/frontend\/web\/js\/view\/billing-address-step.js<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">define(\n    &#091;\n        &#039;ko&#039;,\n        &#039;uiComponent&#039;,\n        &#039;underscore&#039;,\n        &#039;Magento_Checkout\/js\/model\/quote&#039;,\n        &#039;Magento_Checkout\/js\/model\/step-navigator&#039;,\n        &#039;mage\/translate&#039;\n    ],\n    function (\n        ko,\n        Component,\n        _,\n        quote,\n        stepNavigator,\n        $t\n    ) {\n        &#039;use strict&#039;;\n\n        return Component.extend({\n            defaults: {\n                template: &#039;Webkul_CheckoutCustomization\/view\/billing-step&#039;\n            },\n\n            \/\/add here your logic to display step,\n            isVisible: ko.observable(quote.isVirtual()),\n            isVirtual: quote.isVirtual(),\n\n            \/**\n             *\n             * @returns {*}\n             *\/\n            initialize: function () {\n                this._super();\n                if (!quote.isVirtual()) { \/\/update condition if you need to enable for virtual products\n                \/\/ register your step\n                stepNavigator.registerStep(\n                    &#039;custom-billing-step&#039;,\n                    &#039;custom-billing-step&#039;,\n                    $t(&#039;Billing Address&#039;),\n                    this.isVisible, _.bind(this.navigate, this),\n                    11\n                );\n                }\n\n            },\n\n            \/**\n             * The navigate() method is responsible for navigation between checkout step\n             * during checkout. You can add custom logic, for example some conditions\n             * for switching to your custom step\n             *\/\n            navigate: function () {\n\n            },\n\n            \/**\n             * @returns void\n             *\/\n            navigateToNextStep: function () {\n                stepNavigator.next();\n            }\n        });\n    }\n);<\/pre>\n\n\n\n<p><strong>2. Now we need to create html template file (billing-step.html) defined in above file.<\/strong><br><strong>File: Webkul\/<strong>CheckoutCustomization<\/strong>\/view\/frontend\/web\/template\/billing-step.html<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;!--The &#039;step_code&#039; value from the .js file should be used--&gt;\n&lt;li id=&quot;custom-billing-step&quot; data-bind=&quot;fadeVisible: isVisible&quot;&gt;\n    &lt;div class=&quot;step-title&quot; data-bind=&quot;i18n: &#039;Billing Information&#039;&quot; data-role=&quot;title&quot;&gt;&lt;\/div&gt;\n    &lt;div id=&quot;checkout-step-title&quot; class=&quot;step-content&quot; data-role=&quot;content&quot;&gt;\n        &lt;form data-bind=&quot;submit: navigateToNextStep&quot; novalidate=&quot;novalidate&quot;&gt;\n            &lt;!-- ko foreach: getRegion(&#039;afterMethods&#039;) --&gt;\n            &lt;!-- ko template: getTemplate() --&gt;\n            &lt;!-- \/ko --&gt;\n            &lt;!-- \/ko --&gt;\n            &lt;div class=&quot;actions-toolbar&quot;&gt;\n                &lt;div class=&quot;primary&quot;&gt;\n                    &lt;button data-role=&quot;opc-continue&quot; type=&quot;submit&quot; class=&quot;button action continue primary&quot;&gt;\n                        &lt;span&gt;\n                            &lt;!-- ko i18n: &#039;Next&#039;--&gt;\n                            &lt;!-- \/ko --&gt;\n                        &lt;\/span&gt;\n                    &lt;\/button&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;\n&lt;\/li&gt;<\/pre>\n\n\n\n<p><strong>3. Create Webkul\/<strong>CheckoutCustomization<\/strong>\/view\/frontend\/layout\/checkout_index_index.xml<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;page xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; layout=&quot;1column&quot; xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:View\/Layout\/etc\/page_configuration.xsd&quot;&gt;\n  &lt;head&gt;\n    &lt;css src=&quot;Webkul_CheckoutCustomization::css\/style.css&quot;\/&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;referenceBlock name=&quot;checkout.root&quot;&gt;\n      &lt;arguments&gt;\n        &lt;argument name=&quot;jsLayout&quot; xsi:type=&quot;array&quot;&gt;\n          &lt;item name=&quot;components&quot; xsi:type=&quot;array&quot;&gt;\n            &lt;item name=&quot;checkout&quot; xsi:type=&quot;array&quot;&gt;\n              &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                &lt;item name=&quot;steps&quot; xsi:type=&quot;array&quot;&gt;\n                  &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                    &lt;!-- The new step you add --&gt;\n                    &lt;item name=&quot;custom-billing-step&quot; xsi:type=&quot;array&quot;&gt;\n                      &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;uiComponent&lt;\/item&gt;\n                      &lt;item name=&quot;sortOrder&quot; xsi:type=&quot;string&quot;&gt;2&lt;\/item&gt;\n                      &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                        &lt;item name=&quot;custom-billing&quot; xsi:type=&quot;array&quot;&gt;\n                          &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;Webkul_CheckoutCustomization\/js\/view\/billing-address-step&lt;\/item&gt;\n                          &lt;item name=&quot;config&quot; xsi:type=&quot;array&quot;&gt;\n                            &lt;item name=&quot;title&quot; xsi:type=&quot;string&quot; translate=&quot;true&quot;&gt;Billing Address&lt;\/item&gt;\n                          &lt;\/item&gt;\n                          &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                            &lt;item name=&quot;customer-email&quot; xsi:type=&quot;array&quot;&gt;\n                              &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;Magento_Checkout\/js\/view\/form\/element\/email&lt;\/item&gt;\n                              &lt;item name=&quot;displayArea&quot; xsi:type=&quot;string&quot;&gt;customer-email&lt;\/item&gt;\n                              &lt;item name=&quot;tooltip&quot; xsi:type=&quot;array&quot;&gt;\n                                &lt;item name=&quot;description&quot; xsi:type=&quot;string&quot; translate=&quot;true&quot;&gt;We&#039;ll send your order confirmation here.&lt;\/item&gt;\n                              &lt;\/item&gt;\n                              &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                                &lt;item name=&quot;before-login-form&quot; xsi:type=&quot;array&quot;&gt;\n                                  &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;uiComponent&lt;\/item&gt;\n                                  &lt;item name=&quot;displayArea&quot; xsi:type=&quot;string&quot;&gt;before-login-form&lt;\/item&gt;\n                                  &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                                      &lt;!-- before login form fields --&gt;\n                                  &lt;\/item&gt;\n                                &lt;\/item&gt;\n                                &lt;item name=&quot;additional-login-form-fields&quot; xsi:type=&quot;array&quot;&gt;\n                                  &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;uiComponent&lt;\/item&gt;\n                                  &lt;item name=&quot;displayArea&quot; xsi:type=&quot;string&quot;&gt;additional-login-form-fields&lt;\/item&gt;\n                                  &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                                      &lt;!-- additional login form fields --&gt;\n                                  &lt;\/item&gt;\n                                &lt;\/item&gt;\n                              &lt;\/item&gt;\n                            &lt;\/item&gt;\n                            &lt;!-- merge your payment methods here --&gt;\n                            &lt;item name=&quot;afterMethods&quot; xsi:type=&quot;array&quot;&gt;\n                                &lt;item name=&quot;component&quot; xsi:type=&quot;string&quot;&gt;uiComponent&lt;\/item&gt;\n                                &lt;item name=&quot;displayArea&quot; xsi:type=&quot;string&quot;&gt;afterMethods&lt;\/item&gt;\n                                &lt;item name=&quot;children&quot; xsi:type=&quot;array&quot;&gt;\n                                    \n                                &lt;\/item&gt;\n                            &lt;\/item&gt;\n                          &lt;\/item&gt;\n                        &lt;\/item&gt;\n                      &lt;\/item&gt;\n                    &lt;\/item&gt;\n                  &lt;\/item&gt;\n                &lt;\/item&gt;\n              &lt;\/item&gt;\n            &lt;\/item&gt;\n          &lt;\/item&gt;\n        &lt;\/argument&gt;\n      &lt;\/arguments&gt;\n    &lt;\/referenceBlock&gt;\n  &lt;\/body&gt;\n&lt;\/page&gt;<\/pre>\n\n\n\n<p><strong>Now,<\/strong> add css file: <strong>Webkul\/CheckoutCustomization\/view\/frontend\/web\/css\/style.css<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">@media (min-width: 768px), print {\n    #custom-billing-step .actions-toolbar .primary {\n        float: right;\n        margin: 0;\n    }\n}\n#custom-billing-step &gt; .actions-toolbar &gt; .primary .action.primary{\n    line-height: 2.2rem;\n    padding: 14px 17px;\n    font-size: 1.8rem;\n}\n@media (min-width: 768px), print{\n    #custom-billing-step .actions-toolbar .action-update {\n        margin: 6px 20px 0 0;\n    }\n}\n#custom-billing-step .checkout-billing-address{\n    margin-bottom: 10px;\n}<\/pre>\n\n\n\n<p><br><strong>4. Create Webkul\/CheckoutCustomization\/Block\/Checkout\/LayoutProcessor.php to insert Billing Address form in the xml.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?php\n\nnamespace Webkul\\CheckoutCustomization\\Block\\Checkout;\n\nuse Magento\\Checkout\\Helper\\Data;\nuse Magento\\Framework\\App\\ObjectManager;\n\nclass LayoutProcessor\n{\n    \/**\n     * @var \\Magento\\Customer\\Model\\AttributeMetadataDataProvider\n     *\/\n    private $attributeMetadataDataProvider;\n\n    \/**\n     * @var \\Magento\\Ui\\Component\\Form\\AttributeMapper\n     *\/\n    protected $attributeMapper;\n\n    \/**\n     * @var AttributeMerger\n     *\/\n    protected $merger;\n\n    \/**\n     * @var \\Magento\\Customer\\Model\\Options\n     *\/\n    private $options;\n\n    \/**\n     * @var Data\n     *\/\n    private $checkoutDataHelper;\n\n    \/**\n     * @param \\Magento\\Customer\\Model\\AttributeMetadataDataProvider $attributeMetadataDataProvider\n     * @param \\Magento\\Ui\\Component\\Form\\AttributeMapper $attributeMapper\n     * @param AttributeMerger $merger\n     *\/\n    public function __construct(\n        \\Magento\\Customer\\Model\\AttributeMetadataDataProvider $attributeMetadataDataProvider,\n        \\Magento\\Ui\\Component\\Form\\AttributeMapper $attributeMapper,\n        \\Magento\\Checkout\\Block\\Checkout\\AttributeMerger $merger\n    ) {\n        $this-&gt;attributeMetadataDataProvider = $attributeMetadataDataProvider;\n        $this-&gt;attributeMapper = $attributeMapper;\n        $this-&gt;merger = $merger;\n    }\n\n    \/**\n     * @deprecated\n     * @return \\Magento\\Customer\\Model\\Options\n     *\/\n    private function getOptions()\n    {\n        if (!is_object($this-&gt;options)) {\n            $this-&gt;options = ObjectManager::getInstance()-&gt;get(\\Magento\\Customer\\Model\\Options::class);\n        }\n        return $this-&gt;options;\n    }\n\n    \/**\n     * @return array\n     *\/\n    private function getAddressAttributes()\n    {\n        \/** @var \\Magento\\Eav\\Api\\Data\\AttributeInterface&#091;] $attributes *\/\n        $attributes = $this-&gt;attributeMetadataDataProvider-&gt;loadAttributesCollection(\n            &#039;customer_address&#039;,\n            &#039;customer_register_address&#039;\n        );\n\n        $elements = &#091;];\n        foreach ($attributes as $attribute) {\n            $code = $attribute-&gt;getAttributeCode();\n            if ($attribute-&gt;getIsUserDefined()) {\n                continue;\n            }\n            $elements&#091;$code] = $this-&gt;attributeMapper-&gt;map($attribute);\n            if (isset($elements&#091;$code]&#091;&#039;label&#039;])) {\n                $label = $elements&#091;$code]&#091;&#039;label&#039;];\n                $elements&#091;$code]&#091;&#039;label&#039;] = __($label);\n            }\n        }\n        return $elements;\n    }\n\n    \/**\n     * Convert elements(like prefix and suffix) from inputs to selects when necessary\n     *\n     * @param array $elements address attributes\n     * @param array $attributesToConvert fields and their callbacks\n     * @return array\n     *\/\n    private function convertElementsToSelect($elements, $attributesToConvert)\n    {\n        $codes = array_keys($attributesToConvert);\n        foreach (array_keys($elements) as $code) {\n            if (!in_array($code, $codes)) {\n                continue;\n            }\n            $options = call_user_func($attributesToConvert&#091;$code]);\n            if (!is_array($options)) {\n                continue;\n            }\n            $elements&#091;$code]&#091;&#039;dataType&#039;] = &#039;select&#039;;\n            $elements&#091;$code]&#091;&#039;formElement&#039;] = &#039;select&#039;;\n\n            foreach ($options as $key =&gt; $value) {\n                $elements&#091;$code]&#091;&#039;options&#039;]&#091;] = &#091;\n                    &#039;value&#039; =&gt; $key,\n                    &#039;label&#039; =&gt; $value,\n                ];\n            }\n        }\n\n        return $elements;\n    }\n\n    \/**\n     * Process js Layout of block\n     *\n     * @param array $jsLayout\n     * @return array\n     *\/\n    public function process($jsLayout)\n    {\n        $attributesToConvert = &#091;\n            &#039;prefix&#039; =&gt; &#091;$this-&gt;getOptions(), &#039;getNamePrefixOptions&#039;],\n            &#039;suffix&#039; =&gt; &#091;$this-&gt;getOptions(), &#039;getNameSuffixOptions&#039;],\n        ];\n\n        $elements = $this-&gt;getAddressAttributes();\n        $elements = $this-&gt;convertElementsToSelect($elements, $attributesToConvert);\n        \/\/ The following code is a workaround for custom address attributes\n        if (isset($jsLayout&#091;&#039;components&#039;]&#091;&#039;checkout&#039;]&#091;&#039;children&#039;]&#091;&#039;steps&#039;]&#091;&#039;children&#039;]&#091;&#039;billing-step&#039;]&#091;&#039;children&#039;]\n            &#091;&#039;payment&#039;]&#091;&#039;children&#039;]\n        )) {\n            $jsLayout&#091;&#039;components&#039;]&#091;&#039;checkout&#039;]&#091;&#039;children&#039;]&#091;&#039;steps&#039;]&#091;&#039;children&#039;]&#091;&#039;custom-billing-step&#039;]&#091;&#039;children&#039;]\n            &#091;&#039;custom-billing&#039;]&#091;&#039;children&#039;] = $this-&gt;processNewStepsChildrenComponents(\n                $jsLayout&#091;&#039;components&#039;]&#091;&#039;checkout&#039;]&#091;&#039;children&#039;]&#091;&#039;steps&#039;]&#091;&#039;children&#039;]&#091;&#039;billing-step&#039;]&#091;&#039;children&#039;]\n                &#091;&#039;payment&#039;]&#091;&#039;children&#039;],\n                $jsLayout&#091;&#039;components&#039;]&#091;&#039;checkout&#039;]&#091;&#039;children&#039;]&#091;&#039;steps&#039;]&#091;&#039;children&#039;]&#091;&#039;custom-billing-step&#039;]&#091;&#039;children&#039;]\n                &#091;&#039;custom-billing&#039;]&#091;&#039;children&#039;],\n                $elements\n            );\n\n        }\n        return $jsLayout;\n    }\n\n    \/**\n     * Appends billing address form component to payment layout\n     *\n     * @param array $paymentLayout\n     * @param array $elements\n     *\n     * @return array\n     *\/\n    private function processNewStepsChildrenComponents(\n        array $paymentLayout,\n        array $newStepsLayout,\n        array $elements\n    ) {\n        if (!isset($paymentLayout&#091;&#039;payments-list&#039;]&#091;&#039;children&#039;])) {\n            $paymentLayout&#091;&#039;payments-list&#039;]&#091;&#039;children&#039;] = &#091;];\n        }\n\n        if (!isset($newStepsLayout&#091;&#039;afterMethods&#039;]&#091;&#039;children&#039;])) {\n            $newStepsLayout&#091;&#039;afterMethods&#039;]&#091;&#039;children&#039;] = &#091;];\n        }\n\n        $component&#091;&#039;billing-address-form&#039;] = $this-&gt;getBillingAddressComponent(\n            &#039;shared&#039;,\n            $elements\n        );\n\n        $newStepsLayout&#091;&#039;afterMethods&#039;]&#091;&#039;children&#039;] = array_merge_recursive(\n            $component,\n            $newStepsLayout&#091;&#039;afterMethods&#039;]&#091;&#039;children&#039;]\n        );\n\n        return $newStepsLayout;\n    }\n\n    \n    \/**\n     * Gets billing address component details\n     *\n     * @param string $paymentCode\n     * @param array  $elements\n     *\n     * @return array\n     *\/\n    private function getBillingAddressComponent($paymentCode, $elements)\n    {\n        return &#091;\n            &#039;component&#039; =&gt; &#039;Magento_Checkout\/js\/view\/billing-address&#039;,\n            &#039;displayArea&#039; =&gt; &#039;billing-address-form-&#039; . $paymentCode,\n            &#039;provider&#039; =&gt; &#039;checkoutProvider&#039;,\n            &#039;deps&#039; =&gt; &#039;checkoutProvider&#039;,\n            &#039;dataScopePrefix&#039; =&gt; &#039;billingAddress&#039; . $paymentCode,\n            &#039;sortOrder&#039; =&gt; 1,\n            &#039;children&#039; =&gt; &#091;\n                &#039;form-fields&#039; =&gt; &#091;\n                    &#039;component&#039; =&gt; &#039;uiComponent&#039;,\n                    &#039;displayArea&#039; =&gt; &#039;additional-fieldsets&#039;,\n                    &#039;children&#039; =&gt; $this-&gt;merger-&gt;merge(\n                        $elements,\n                        &#039;checkoutProvider&#039;,\n                        &#039;billingAddress&#039; . $paymentCode,\n                        &#091;\n                            &#039;country_id&#039; =&gt; &#091;\n                                &#039;sortOrder&#039; =&gt; 115,\n                            ],\n                            &#039;region&#039; =&gt; &#091;\n                                &#039;visible&#039; =&gt; false,\n                            ],\n                            &#039;region_id&#039; =&gt; &#091;\n                                &#039;component&#039; =&gt; &#039;Magento_Ui\/js\/form\/element\/region&#039;,\n                                &#039;config&#039; =&gt; &#091;\n                                    &#039;template&#039; =&gt; &#039;ui\/form\/field&#039;,\n                                    &#039;elementTmpl&#039; =&gt; &#039;ui\/form\/element\/select&#039;,\n                                    &#039;customEntry&#039; =&gt; &#039;billingAddress&#039; . $paymentCode . &#039;.region&#039;,\n                                ],\n                                &#039;validation&#039; =&gt; &#091;\n                                    &#039;required-entry&#039; =&gt; true,\n                                ],\n                                &#039;filterBy&#039; =&gt; &#091;\n                                    &#039;target&#039; =&gt; &#039;${ $.provider }:${ $.parentScope }.country_id&#039;,\n                                    &#039;field&#039; =&gt; &#039;country_id&#039;,\n                                ],\n                            ],\n                            &#039;postcode&#039; =&gt; &#091;\n                                &#039;component&#039; =&gt; &#039;Magento_Ui\/js\/form\/element\/post-code&#039;,\n                                &#039;validation&#039; =&gt; &#091;\n                                    &#039;required-entry&#039; =&gt; true,\n                                ],\n                            ],\n                            &#039;company&#039; =&gt; &#091;\n                                &#039;validation&#039; =&gt; &#091;\n                                    &#039;min_text_length&#039; =&gt; 0,\n                                ],\n                            ],\n                            &#039;fax&#039; =&gt; &#091;\n                                &#039;validation&#039; =&gt; &#091;\n                                    &#039;min_text_length&#039; =&gt; 0,\n                                ],\n                            ],\n                            &#039;telephone&#039; =&gt; &#091;\n                                &#039;config&#039; =&gt; &#091;\n                                    &#039;tooltip&#039; =&gt; &#091;\n                                        &#039;description&#039; =&gt; __(&#039;For delivery questions.&#039;),\n                                    ],\n                                ],\n                            ],\n                        ]\n                    ),\n                ],\n            ],\n        ];\n    }\n}<\/pre>\n\n\n\n<p>Lets call our custom Webkul\/CheckoutCustomization\/Block\/Checkout\/LayoutProcessor Block.<br><strong>5. create file# Webkul\/CheckoutCustomization\/etc\/frontend\/di.xml.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;!--\n\/**\n * Webkul Software\n *\n * @category  Webkul\n * @package   Webkul_MarketplaceCustomization\n * @author    Webkul\n * @copyright Webkul Software Private Limited (https:\/\/webkul.com)\n * @license   https:\/\/store.webkul.com\/license.html\n *\/\n --&gt;\n\n&lt;config xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:ObjectManager\/etc\/config.xsd&quot;&gt;\n    &lt;type name=&quot;Magento\\Checkout\\Block\\Onepage&quot;&gt;\n        &lt;arguments&gt;\n            &lt;argument name=&quot;layoutProcessors&quot; xsi:type=&quot;array&quot;&gt;\n                &lt;item name=&quot;customization_billing&quot; xsi:type=&quot;object&quot;&gt;Webkul\\CheckoutCustomization\\Block\\Checkout\\LayoutProcessor&lt;\/item&gt;\n            &lt;\/argument&gt;\n        &lt;\/arguments&gt;\n    &lt;\/type&gt;\n&lt;\/config&gt;<\/pre>\n\n\n\n<p><strong>6. Now overwrite https:\/\/github.com\/magento\/magento2\/blob\/2.1.9\/app\/code\/Magento\/Checkout\/view\/frontend\/web\/js\/view\/payment.js file to stop Payment Page Step before our Billing Address Step<\/strong><\/p>\n\n\n\n<p><strong>Create File Webkul\/<strong>CheckoutCustomization<\/strong>\/view\/frontend\/requirejs-config.js<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">var config = {\n    map: {\n        &#039;*&#039;: {\n            &quot;Magento_Checkout\/js\/view\/payment&quot;: &quot;Webkul_CheckoutCustomization\/js\/view\/payment&quot;\n        }\n    }\n};<\/pre>\n\n\n\n<p><strong>Now,<\/strong> create this file in our CheckoutCustomization Module.<br>#<strong>File: Webkul\/CheckoutCustomization\/view\/frontend\/web\/js\/view\/payment.js<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">\/*jshint browser:true jquery:true*\/\n\/*global alert*\/\ndefine(\n    &#091;\n        &#039;jquery&#039;,\n        &quot;underscore&quot;,\n        &#039;uiComponent&#039;,\n        &#039;ko&#039;,\n        &#039;Magento_Checkout\/js\/model\/quote&#039;,\n        &#039;Magento_Checkout\/js\/model\/step-navigator&#039;,\n        &#039;Magento_Checkout\/js\/model\/payment-service&#039;,\n        &#039;Magento_Checkout\/js\/model\/payment\/method-converter&#039;,\n        &#039;Magento_Checkout\/js\/action\/get-payment-information&#039;,\n        &#039;Magento_Checkout\/js\/model\/checkout-data-resolver&#039;,\n        &#039;mage\/translate&#039;\n    ],\n    function (\n        $,\n        _,\n        Component,\n        ko,\n        quote,\n        stepNavigator,\n        paymentService,\n        methodConverter,\n        getPaymentInformation,\n        checkoutDataResolver,\n        $t\n    ) {\n        &#039;use strict&#039;;\n\n        \/** Set payment methods to collection *\/\n        paymentService.setPaymentMethods(methodConverter(window.checkoutConfig.paymentMethods));\n\n        return Component.extend({\n            defaults: {\n                template: &#039;Magento_Checkout\/payment&#039;,\n                activeMethod: &#039;&#039;\n            },\n            isVisible: ko.observable(false),\n            quoteIsVirtual: quote.isVirtual(),\n            isPaymentMethodsAvailable: ko.computed(function () {\n                return paymentService.getAvailablePaymentMethods().length &gt; 0;\n            }),\n\n            initialize: function () {\n                this._super();\n                checkoutDataResolver.resolvePaymentMethod();\n                stepNavigator.registerStep(\n                    &#039;payment&#039;,\n                    null,\n                    $t(&#039;Review &amp; Payments&#039;),\n                    this.isVisible,\n                    _.bind(this.navigate, this),\n                    20\n                );\n                return this;\n            },\n\n            navigate: function () {\n                var self = this;\n                getPaymentInformation().done(function () {\n                    self.isVisible(true);\n                });\n            },\n\n            getFormKey: function () {\n                return window.checkoutConfig.formKey;\n            }\n        });\n    }\n);<\/pre>\n\n\n\n<p><strong>7. Finally copy https:\/\/github.com\/magento\/magento2\/tree\/2.1.9\/app\/code\/Magento\/Checkout\/view\/frontend\/web\/js\/view\/payment directory and place in our Billing Step Module<br>Webkul\/<strong>CheckoutCustomization<\/strong>\/view\/frontend\/web\/js\/view<\/strong><\/p>\n\n\n\n<p><strong>Note:<\/strong> Here, we have copied the js files of payment directory from Magento 2.1.9. So, you can manage this as per your magento version.<strong><br><\/strong><\/p>\n\n\n\n<p>Now Clear the cache.<br>It will look like this:<br><img decoding=\"async\" class=\"alignnone size-full wp-image-104879\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\" alt=\"Checkout\" width=\"857\" height=\"639\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png 857w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout-250x186.png 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout-300x224.png 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout-768x573.png 768w\" sizes=\"(max-width: 857px) 100vw, 857px\" loading=\"lazy\" \/><\/p>\n\n\n\n<p>Should you need technical help, feel free to email us at <a href=\"mailto:support@webkul.com\">support@webkul.com<\/a>. Additionally, discover various options to enhance your store&#8217;s capabilities by visiting the <a href=\"https:\/\/store.webkul.com\/Magento-2.html\">Adobe Commerce modules<\/a> page.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><\/ol>\n\n\n\n<p>If you need specialized advice or want to develop unique custom features, <a href=\"https:\/\/webkul.com\/hire-magento-developers\/\">Hire Adobe Commerce Developers<\/a> for your needs.<\/p>\n\n\n\n<p>Thanks<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here we will learn, How to Add Billing Address Step on Adobe Commerce (Magento 2) Checkout page 1. Create new file Webkul\/CheckoutCustomization\/view\/frontend\/web\/js\/view\/billing-address-step.js 2. Now we need to create html template file (billing-step.html) defined in above file.File: Webkul\/CheckoutCustomization\/view\/frontend\/web\/template\/billing-step.html 3. Create Webkul\/CheckoutCustomization\/view\/frontend\/layout\/checkout_index_index.xml Now, add css file: Webkul\/CheckoutCustomization\/view\/frontend\/web\/css\/style.css 4. Create Webkul\/CheckoutCustomization\/Block\/Checkout\/LayoutProcessor.php to insert Billing Address form in the <a href=\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[302,3286],"tags":[5900,5898,5899],"class_list":["post-104861","post","type-post","status-publish","format-standard","hentry","category-magento2","category-magento2-1","tag-magento2-billing-address","tag-magento2-checkout","tag-magento2-checkout-step"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Add Billing Address Step on Magento2 Checkout<\/title>\n<meta name=\"description\" content=\"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Add Billing Address Step on Magento2 Checkout\" \/>\n<meta property=\"og:description\" content=\"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-12-15T16:04:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-29T13:00:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\" \/>\n<meta name=\"author\" content=\"Abhishek Singh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abhishek Singh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\"},\"author\":{\"name\":\"Abhishek Singh\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/573e459f54796eb4195511990de4bfd0\"},\"headline\":\"Add Billing Address Step on Checkout Adobe Commerce (Magento 2)\",\"datePublished\":\"2017-12-15T16:04:32+00:00\",\"dateModified\":\"2024-07-29T13:00:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\"},\"wordCount\":285,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\",\"keywords\":[\"Magento2 Billing Address\",\"Magento2 Checkout\",\"Magento2 Checkout Step\"],\"articleSection\":[\"Magento2\",\"Magento2.1\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\",\"url\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\",\"name\":\"How to Add Billing Address Step on Magento2 Checkout\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\",\"datePublished\":\"2017-12-15T16:04:32+00:00\",\"dateModified\":\"2024-07-29T13:00:20+00:00\",\"description\":\"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png\",\"width\":857,\"height\":639},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add Billing Address Step on Checkout Adobe Commerce (Magento 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/573e459f54796eb4195511990de4bfd0\",\"name\":\"Abhishek Singh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4ac7e0e671bf743359d7e3f140c262d1b16d71106f0a1aeaecca327a2805ae4?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d4ac7e0e671bf743359d7e3f140c262d1b16d71106f0a1aeaecca327a2805ae4?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Abhishek Singh\"},\"description\":\"Adobe Commerce certified Magento developer with over 12 years of experience at Webkul. Passionate about scalable Magento 2-based webshops, AI, and multi-channel integrations, Abhishek consistently delivers innovative and efficient e-commerce solutions that propel businesses forward.\",\"sameAs\":[\"http:\/\/webkul.com\"],\"url\":\"https:\/\/webkul.com\/blog\/author\/abhishek\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Add Billing Address Step on Magento2 Checkout","description":"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/","og_locale":"en_US","og_type":"article","og_title":"How to Add Billing Address Step on Magento2 Checkout","og_description":"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2","og_url":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2017-12-15T16:04:32+00:00","article_modified_time":"2024-07-29T13:00:20+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png","type":"","width":"","height":""}],"author":"Abhishek Singh","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Abhishek Singh","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/"},"author":{"name":"Abhishek Singh","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/573e459f54796eb4195511990de4bfd0"},"headline":"Add Billing Address Step on Checkout Adobe Commerce (Magento 2)","datePublished":"2017-12-15T16:04:32+00:00","dateModified":"2024-07-29T13:00:20+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/"},"wordCount":285,"commentCount":5,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png","keywords":["Magento2 Billing Address","Magento2 Checkout","Magento2 Checkout Step"],"articleSection":["Magento2","Magento2.1"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/","url":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/","name":"How to Add Billing Address Step on Magento2 Checkout","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png","datePublished":"2017-12-15T16:04:32+00:00","dateModified":"2024-07-29T13:00:20+00:00","description":"Here we will learn, How to Add Billing Address Step on Magento2 Checkout Add Billing Address Step on Checkout Magento2","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2017\/12\/Checkout.png","width":857,"height":639},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/add-billing-address-step-checkout-magento-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Add Billing Address Step on Checkout Adobe Commerce (Magento 2)"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/573e459f54796eb4195511990de4bfd0","name":"Abhishek Singh","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d4ac7e0e671bf743359d7e3f140c262d1b16d71106f0a1aeaecca327a2805ae4?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d4ac7e0e671bf743359d7e3f140c262d1b16d71106f0a1aeaecca327a2805ae4?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Abhishek Singh"},"description":"Adobe Commerce certified Magento developer with over 12 years of experience at Webkul. Passionate about scalable Magento 2-based webshops, AI, and multi-channel integrations, Abhishek consistently delivers innovative and efficient e-commerce solutions that propel businesses forward.","sameAs":["http:\/\/webkul.com"],"url":"https:\/\/webkul.com\/blog\/author\/abhishek\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/104861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=104861"}],"version-history":[{"count":10,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/104861\/revisions"}],"predecessor-version":[{"id":455210,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/104861\/revisions\/455210"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=104861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=104861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=104861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}