OxifyOxify

Theme templates

What you can and can't customize in your theme — the cart, the order status page, and the customer account order page.

Your theme has its own Liquid templates, and bundles show up in three of them. Two you can edit; one you can't.

Where to edit: Shopify admin → Online Store → Themes → ⋯ → Edit code.

Duplicate your theme first

Always duplicate the live theme and edit the copy, then preview it before publishing.

Cart page and cart drawer

Files: sections/main-cart-items.liquid, snippets/cart-drawer.liquid, or your theme's equivalent.

In merged cart line mode you usually don't need to touch anything — Bundle Builder's Cart Transform already presents the box as a single line with the bundle's name and image, because that line is the box's hidden parent product. The merged line carries no properties, so a theme that doesn't list a bundle's contents shows just the name and image.

In individual mode each product is its own cart line. Themes such as Dawn skip underscore-prefixed properties, so shoppers don't see the app's _ properties — which is normally what you want — but they usually do see Bundle SKU under each product if you've turned that setting on.

If you want a visible "part of your box" marker in individual mode, add this inside your theme's cart line loop:

{% if item.properties._bundle_id != blank %}
  <span class="cart-item__bundle-tag">
    Part of your bundle{% if item.properties["Bundle SKU"] != blank %} ({{ item.properties["Bundle SKU"] }}){% endif %}
  </span>
{% endif %}

Note the loop variable is item in most themes' cart templates, not line_item.

Customer account order page

File: templates/customers/order.liquid (or sections/main-order.liquid in Online Store 2.0 themes).

This is the order history page a logged-in customer sees, and it lists components as separate rows. Group them with exactly the same pattern as the notification email, swapping line_items for the theme's variable and dropping the table markup for your theme's classes:

{% assign bundle_ids = "" %}
{% for line_item in order.line_items %}
  {% if line_item.properties._bundle_id != blank %}
    {% assign bundle_ids = bundle_ids | append: line_item.properties._bundle_id | append: "~|~" %}
  {% endif %}
{% endfor %}
{% assign bundle_ids = bundle_ids | split: "~|~" | uniq %}

…then render the non-bundle lines, then one block per id, as on the other pages. The bundle name has the same limits as in the email: a merged box ordered today carries no name on its lines (see Getting the bundle's name).

New customer accounts

If your store uses Shopify's new customer accounts (the shopify.com/…/account experience) rather than classic accounts, this template isn't used and can't be customized in Liquid. There's nothing to edit — the order shows the component lines.

Checkout and the order status page

Not customizable. Checkout is rendered by Shopify, and the Thank you / Order status page is too. You can't add Liquid to either.

The good news is you don't need to: in merged mode the bundle already appears as one line at checkout, with its name and image, because the Cart Transform merge is still in effect at that point. The split into components happens when the order is created, after checkout is done. In individual mode there is no merge, so checkout shows one line per product.

If you need custom content on those pages, that's a Checkout UI extension — a developer task, on Shopify Plus for the checkout steps.

Quick reference

SurfaceEditableBundle already grouped?
Cart page / drawerYes (theme)Yes in merged mode
CheckoutNoYes in merged mode
Thank you / Order statusNoNo
Customer account order (classic)Yes (theme)No — use the snippet above
Customer account order (new accounts)NoNo

Next

Troubleshooting — when the grouping or the SKU doesn't show up.

On this page