Click and collect in Magento 2: making sure the right shop gets the order
Click and collect fails in small ways: the customer cannot tell which shop is open, or the shop cannot tell an order is theirs. How to set it up so both sides know.
A customer orders online, ticks "collect in store", and turns up at the Leeds shop on Sunday afternoon. The order was meant for Manchester, which closes at four on Sundays, and nobody in Leeds has heard of it. Each step made sense on its own. The trouble was that the choice of shop was not clear when it was made, and not clearly written on the order afterwards.
Click and collect has two halves. At checkout, the customer needs to choose a shop knowing where it is and when it is open. After checkout, everyone handling the order, in the admin, in e-mails and on the printed paperwork, needs to see which shop it is for. This post looks at both, starting with what Magento can already do.
Magento's own in-store delivery
Magento has an In-Store Delivery method that comes with its Inventory Management (MSI) modules. Adobe's documentation lists what it needs: a stock and source other than the default ones, a configured distance priority algorithm and imported geocodes. Each shop is set up as a source used as a pickup location, and at checkout the customer picks one in a Pick In Store tab, with the nearest source within a search radius preselected1.
If you already run Inventory Management with a source per shop and keep stock levels per shop, this is worth trying first. It ties pickup to the stock that is actually in each shop, which a simpler approach does not. The cost is the set-up: sources, stocks, geocodes and a distance algorithm, which is a lot of machinery for a business with three shops and one warehouse that sends stock to the shops on a van.
What the customer needs at checkout
Whichever method you use, the store chooser should answer the customer's questions on the spot:
- Which shops offer collection at all?
- Which one is nearest to me?
- Is it open today, and until when?
- Where in the shop do I go, and what do I bring?
It should also refuse to place the order without a valid shop, and check that again on the server, not only in the browser.
How Store Locator handles it
Our Store Locator module has a click and collect delivery method that does not depend on Inventory Management. You switch on Offer Click and Collect in the settings and in each location where customers can collect, and add collection instructions per location, such as "Collect from the service desk on the ground floor".
At checkout, the customer chooses Click and Collect and then a shop. The shops are sorted by the delivery postcode and town, so the nearest come first, and each shows its address and today's opening hours. With more than five shops the list is shortened and has a filter field. The customer cannot go on to payment without a shop, and when the order is placed the server checks again that the shop is active, offers click and collect and belongs to the store view. You can set a price, free from a basket subtotal, and a note under the chooser.

Opening hours come from the location records, which also feed the store locator page and a page for each shop. Hours can include a lunch break, and holidays and special hours (one-off, or every year such as Christmas Day) override the weekday hours on that date. Hours that end before they start or overlap are refused when you save, with the day named in the message, which catches typos before customers see them.
Keeping the shop on the order
The second half is where the Leeds and Manchester mix-up would have been caught. When the order is placed, the chosen shop is stored with it as a copy: name, address, phone, e-mail, the opening hours at the time of the order and the collection instructions. If you later change or delete the location, old orders keep what was true when they were placed.

The shop appears in the admin order view, in My Account and the guest order view, on the printed order and, through the shipping description, in order e-mails, invoice and shipment PDFs and the order grid, without any template changes. For example: "Click and Collect - Collect in store (Sample Store Leeds, 12 Example Row, Leeds LS1 1AA)". Integrations reading orders through the REST API get it as an extension attribute.
The same location records power a store locator page at /stores, with a list and a map, search by town or postcode, a "Near me" button and a page per shop with hours, holidays, a map and structured data for search engines. The map uses OpenStreetMap and needs no API key. By default, map tiles load only after the visitor clicks "Show map" (or, with our Cookie Consent module, after they accept a cookie category), and "Near me" asks for the browser's position only after a click and does not send it to your server. Addresses are turned into map positions in the admin when you save or import a location, never while customers browse.
What it does not do
There are no collection dates or time slots, and no stock check per shop: if you need to promise that the item is on the shelf in Leeds, Magento's In-Store Delivery with Inventory Management is the closer fit. Click and collect is not available in multi-address checkout or in Hyvä Checkout; Hyvä stores use the Luma checkout fallback. Headless storefronts that check out only through the REST or GraphQL API cannot choose a shop yet. The delivery address the customer enters at checkout stays on the order. Orders created in the admin get one click and collect method per shop, because the admin order form has no store chooser.
If you have one shop and collection is rare, a Flat Rate method called "Collect from our shop" at £0 may be all you need. Once there are several shops with different hours, the shop has to be chosen properly and written on the order.
The Store Locator page covers the locator, location pages, CSV import and the click and collect settings.
Sources
- Adobe Commerce Admin documentation, "In-store delivery", https://experienceleague.adobe.com/en/docs/commerce-admin/stores-sales/delivery/basic-methods/shipping-in-store-delivery, checked 12 October 2026. ↩
From our shop