Order Printer
Group bundles on invoices, pick lists, and return forms in Shopify's free Order Printer app.
Shopify's Order Printer app has its own templates, separate from the built-in packing slip. They're plain Liquid with access to the same line item properties, so the same grouping technique applies.
Where to edit: Shopify admin → Apps → Order Printer → Templates → pick a template → Edit.
The differences from packing slips
| Packing slip | Order Printer | |
|---|---|---|
| Loop variable | line_items_in_shipment | line_items |
| Quantity field | shipping_quantity | quantity |
line_item.groups | Available | Listed in Shopify's reference but not described — don't rely on it |
| Prices | Not shown | Available (line_item.final_line_price) |
Because you can't rely on groups here, grouping relies entirely on the app's _bundle_id property — which is present in both cart line modes, so nothing is lost. (The packing slip snippet groups by it too, and only uses groups to read the bundle's name.)
Use final_line_price for money, not line_price: Shopify's Order Printer reference marks line_price as deprecated because it leaves out automatic discounts and discount codes, so a bundle total built from it would be the pre-discount amount.
The snippet
Replace the template's {% for line_item in line_items %} loop with this.
The header name comes from _oxify_builder (individual mode) or _bundle_name (older merged lines). A merged box ordered today carries neither, so its header reads Bundle — see Getting the bundle's name to name it yourself, or lead with the SKU.
Adapting it per template
- Invoice — keep the price column, as above. The bundle's total is the sum of its components, which is what the customer paid.
- Packing slip / delivery note — delete the price column and the
b_totallines; keep the SKU and item count. - Pick list — the component
skuon each child row is the field pickers actually need. Keep the bundle header for context and make the child rows the prominent part. - Return form — treat components as individually returnable, because they are. Show the group header for identification only.
Next
Theme templates — the cart and the customer's order page.