Hi,
I'm trying to split up the shipping checkout step into two. The first one is for shipping and billing addresses and the second one is for shipping methods only. How do I accomplish this?
Hello @seanleewir2662
Develop a custom layout for the checkout.
Create a custom module, or adjust your theme to modify.
app/design/frontend/[Vendor]/[Theme]/Magento_Checkout/layout/checkout_index_index.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="checkout.root">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="checkout" xsi:type="array">
<item name="children" xsi:type="array">
<item name="steps" xsi:type="array">
<item name="children" xsi:type="array">
<!-- First Step: Shipping & Billing Addresses -->
<item name="shipping-step-address" xsi:type="array">
<item name="component" xsi:type="string">Magento_Checkout/js/view/shipping</item>
<item name="sortOrder" xsi:type="string">1</item>
</item>
<!-- Second Step: Shipping Methods -->
<item name="shipping-step-methods" xsi:type="array">
<item name="component" xsi:type="string">Vendor_Module/js/view/shipping-methods</item>
<item name="sortOrder" xsi:type="string">2</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</body>
</page>
Build a custom JavaScript component to handle shipping methods.
File: app/design/frontend/[Vendor]/[Theme]/web/js/view/shipping-methods.js
define([
'uiComponent',
'Magento_Checkout/js/model/step-navigator',
'Magento_Checkout/js/model/shipping-service',
'Magento_Checkout/js/model/shipping-rate-registry'
], function (Component, stepNavigator, shippingService, rateRegistry) {
'use strict';
return Component.extend({
defaults: {
template: 'Magento_Checkout/shipping-methods'
},
isVisible: ko.observable(false),
initialize: function () {
this._super();
stepNavigator.registerStep(
'shipping-methods',
null,
'Select Shipping Method',
this.isVisible,
_.bind(this.navigate, this),
15
);
return this;
},
navigate: function () {
this.isVisible(true);
shippingService.isLoading(true);
rateRegistry.set('');
},
navigateToNextStep: function () {
stepNavigator.next();
}
});
});
Create a KnockoutJS template for managing shipping methods.
File: app/design/frontend/[Vendor]/[Theme]/Magento_Checkout/templates/shipping-methods.html
<div class="step-content">
<h2 data-bind="i18n: 'Select Shipping Method'"></h2>
<each args="data: getRegion('shipping-method-list'), as: 'shippingMethodList'">
<render args="shippingMethodList"></render>
</each>
<button type="button" data-bind="click: navigateToNextStep, i18n: 'Next'"></button>
</div>Execute the following commands:
php bin/magento s:up
php bin/magento s:d:c
php bin/magento s:s:d -f
php bin/magento c:f
Hope it helps !
If you find our reply helpful, please give us kudos.
A Leading Magento Development Agency That Delivers Powerful Results, Innovation, and Secure Digital Transformation.
WebDesk Solution Support Team
Get a Free Quote | | Adobe Commerce Partner | Hire Us | Call Us 877.536.3789
Thank You,
WebDesk Solution Support Team
Get a Free Quote | Email | Adobe Commerce Partner | Hire Us | Call Us 877.536.3789
Location: 150 King St. W. Toronto, ON M5H 1J9