A delivery date picker only helps shoppers who reach it.
Shopify cart attributes can collect a delivery date, a gift message, or another detail fulfilment needs. Product-page accelerated checkout skips those attributes, and the newer /buy permalinks cannot carry them either. A required input on the cart page therefore leaves some purchase routes unchecked.
Call the record of those routes a required-field map. For each field, write down where the shopper enters it, where Shopify saves it, and which rule prevents an incomplete order.
A Validation Function can reject missing information, but the shopper also needs somewhere to supply it. Keep collection and enforcement together. Moving a field into a checkout app requires another check because app fields might not appear in an agentic storefront's direct checkout.
Start with the live field.
Where are your Shopify cart attributes saved?
Cart attributes describe the whole cart, while line item properties describe a particular product line. Shopify's order notes guidance distinguishes both from the separate order note, which holds general instructions about preparing or delivering an order.
A delivery date for the whole order fits a cart attribute. Engraving text for one item fits a line item property, so it stays associated with the product being customised. A pickup checkbox records an answer; the selected delivery method still needs its own check.
Use the required-field map below to record those differences before changing the theme or installing another app. Assign the owner who can investigate a failed test, then record the order or checkout result beside that row.
| Checklist row | What you record | Pass criterion | Owner |
|---|---|---|---|
| Cart attributes | Exact key, input, theme or app writer, and order location | The value is saved before checkout and appears on the resulting order | Theme |
| Line item properties | Property key, product input, and relevant product lines | Each required value appears on the correct order line | Theme / merchandising |
| Pickup choice | Cart answer, pickup location, and selected checkout delivery method | Each relevant delivery group uses an allowed method | Ops |
| Inbox handoff | The actual product link, cart action, or checkout link presented | The tested purchase route collects and saves the required details | Support |
| Product-page accelerated checkout | Buy it now and branded buttons available on the tested product | The shopper can supply the required value and missing information blocks completion | Commerce |
| Permalinks | Live /buy and legacy /cart links, their fields, and destination | Required information is supplied through a supported link format or collected after landing | Marketing / apps |
| Checkout collection and validation | Field, storage key, validation rule, and supported purchase routes | A valid purchase completes, and an incomplete one produces an error the shopper can resolve | Checkout |
Open the published theme and search for attributes[ and properties[, including app blocks and the cart drawer. In Shopify's Liquid cart reference, the collection pattern is an input named attributes[attribute-name] within the cart form.
Record the exact spelling of each key, because Delivery date and delivery-date are different names for a validation to read. Check the saved order as well as the input, including Additional details for cart attributes and the relevant product line for properties.
An Ajax cart needs a successful save before the shopper leaves for checkout. Shopify's Ajax Cart API supports updating attributes through cart/update.js and line item properties through the documented add or change operations. Check the saved value first. Inspect the request payload and response to establish that its value reached the cart.
Private fields need separate handling. Shopify documents a double underscore prefix, __, for private cart attributes, which are unavailable through Liquid's cart.attributes and the Ajax API. Private line item properties use a single underscore prefix, _, and remain available through Liquid and Ajax. Inspect their order data rather than treating a missing storefront value as proof that nothing was saved.
Ghost Fragrances is a useful beauty and skincare example of theme-owned gift configuration replacing app-dependent storefront controls. Record your own gift fields separately, including any choice that fulfilment needs on routes which miss the theme.
Which purchase routes miss the cart form?
Product-page accelerated checkout is a documented bypass for cart attributes. Shopify's compatibility guidance names delivery date pickers, gift-wrapping options, and terms checkboxes as examples of unsupported cart attributes.
Test each button separately.
Start with the ordinary cart Checkout button and verify the save request before treating that route as your baseline. Then test Buy it now and whichever branded accelerated buttons your product page offers. Line item properties need their own product-form test, because the cart-attribute limitation does not establish how every product property behaves.
In Inbox, the route depends on what the conversation presents to the shopper. Shopify documents staff sharing product links and the Inbox agent adding products to a cart. Follow the link yourself. Include the actual handoff on your store and any checkout link your team uses in that test.
Cart and Checkout Permalinks use /buy and open checkout by default. Shopify currently lists cart notes, cart attributes, and line item properties as unsupported, while legacy /cart permalinks support those fields.
The /buy parameter continue_to=/cart changes where the buyer lands so the theme can ask for information there. The cart must still collect and save the answer, because attributes remain unsupported in the /buy link. Keep a link on the legacy format when it must carry those supported fields.
Agent-created carts deserve a separate row when your store uses them. Cart MCP returns a continue_url that lets a buyer resume on the merchant's storefront, and a cart can also become a Checkout MCP session. Check the returned route and its collection behaviour instead of assuming that every continue_url skips, or visits, your theme's cart form.
Run the empty-field test as well as a complete order
A useful test covers a completed order with the required information and an attempted purchase without it. Choose a product that genuinely needs the field, such as an engraved item or a delivery-date-dependent product, and record the test order reference against each route.
Use a fresh session where possible so an earlier cart value cannot make an incomplete route appear successful. Test the cart page, cart drawer, product-page buttons, Inbox handoff, and every live permalink format used by campaigns or apps.
Leave the field empty once.
For each attempt, check the cart save, the information shown during checkout, and the data on the resulting order. If validation blocks completion, follow its instructions and confirm that the shopper can enter the missing value and continue.
Pickup requires a delivery check as well as an attribute check. The Storefront API buyer identity mutation supports checkout preferences, including delivery preferences with PICK_UP and a pickupHandle for a location. Shopify describes these as prefills that customers can overwrite, with checkout changes not synced back to the cart.
Treat pickup as a preference.
Where products must be collected, check the selected delivery method against the actual requirement at checkout. Shopify's validation documentation warns that one checkout can contain multiple delivery methods, so inspect every relevant delivery group in mixed shipping and pickup carts.
Give a blocked shopper somewhere to answer
A Cart and Checkout Validation Function supplies the server-side rule that prevents a purchase from proceeding when its criteria fail. Shopify's Validation Function API documents express checkout support, including Shop Pay, Apple Pay, and Google Pay.
The Function input can read a cart attribute or a cart-line attribute by key. Its buyerJourney.step distinguishes stages such as CHECKOUT_INTERACTION and CHECKOUT_COMPLETION, allowing the implementation to apply checks at the intended stage. Use those stages to choose validation timing, and test each sales channel separately.
On Plus, a checkout UI extension can provide a collection interface at supported checkout locations, paired with a validation that reads the same data. The rule needs an input. Confirm both the field's availability and the shopper's recovery path on each route before calling the requirement enforced.
Shopify's checkout Attributes API requires checking canUpdateAttributes before offering attribute controls. It also documents that attribute changes are unavailable with accelerated methods such as Apple Pay and Google Pay. A rule that blocks an empty attribute still needs a tested way for that shopper to supply it.
For 47 Skin, we built gift-with-purchase mechanics using Shopify Functions and checkout UI extensions. Keep promotion display and required-field enforcement as separate rows when testing your own checkout implementation.
Shopify's Functions availability rules distinguish app distribution from the merchant's plan. Custom apps containing Function APIs require Shopify Plus, while stores on any plan can use public apps distributed through the Shopify App Store, subject to individual API restrictions.
Ask what the app enforces.
After installing a compatible validation app, merchants can add and activate rules under Settings > Checkout > Checkout rules, as Shopify's checkout customisation guidance explains. Ask whether your existing field app checks the exact saved key, and where a shopper can supply it after a failed attempt.
Scrumbles provides a health and wellness example of moving delivery logic into checkout. We implemented Shopify delivery functions for postcode-aware shipping costs across England. Use separate tests for delivery pricing and required date information when both affect whether an order can be fulfilled.
What can native checkout fields collect?
Shopify's announced native custom fields save information to an order metafield through blocks in the checkout and accounts editor. At review, the Help Centre marks them as coming soon, with no release before or during BFCM and no early access.
Keep the rollout date open.
All field types are planned for Plus, while other plans get Delivery instructions and Gift message. Checkbox, Delivery instructions, and Gift message fields cannot be required. The fields collect whole-order information, so individual-product engraving and individual-shipment details need a different collection design.
Shopify says these native fields support agentic storefronts that offer direct checkout, and separately warns that checkout-app fields might not appear there. Until native fields are available, test the collection method you can actually deploy and record any route where the shopper cannot answer.
A cart-page picker can remain useful for customers who visit the cart. This example belongs inside the existing cart form, uses the exact attribute key, and escapes the saved value before placing it in HTML.
<label for="DeliveryDate">Delivery date</label>
<input
id="DeliveryDate"
type="date"
name="attributes[Delivery date]"
value="{{ cart.attributes['Delivery date'] | escape }}"
>
The snippet only collects and displays a cart attribute when the containing form saves it. Save it before leaving. An Ajax drawer needs its own save handling, and a date input supplies neither a server-side requirement nor a guarantee that the selected date is available for fulfilment.
Keep the failing route with the order
Give each required-field map row an owner who can reproduce its failure and change the relevant component. Theme owns the input and save, support owns the Inbox handoff, marketing owns campaign link formats, checkout owns validation, and ops confirms the fulfilment result.
Repeat the same tests after changing the collection method or rule, including the empty-field attempt and the successful recovery. Record where the information lands on the order, since a cart attribute, a product property, and an order metafield require different checks.
Keep the evidence with it.
If those records disagree, book a stack assessment or review our Shopify UI extensions and Functions service with the failing route and order reference to hand. Start with the purchase route that lets a required delivery date remain blank.



