How to Group uShopAid Bundle Items in Shopify Order Printer
When a bundle contains multiple products, Shopify displays those products as separate line items in the order. This structure allows Shopify to process inventory and fulfillment correctly, but it can make it difficult for your fulfillment team to see which items should be packed together.
This guide shows you how to create a custom Shopify Order Printer template that automatically groups products belonging to the same uShopAid bundle. Each group appears in a separate Pack these items together section.
The template also displays the product image, quantity, product name, variant, and SKU to make picking and packing easier.
What the printed document looks like
Products that belong to the same bundle appear in one section:
Pack these items together · 2 items
Image Qty Item Variant SKU
1 Anchor Bracelet Mens Silver —
1 Anchor Bracelet Mens Gold —
If an order contains multiple bundles, each bundle appears in its own section. Products that aren't part of a bundle appear under Other items.
[Insert the final print preview screenshot here]

Products from the same bundle are grouped under “Pack these items together,” with separate columns for the product image, quantity, variant, and SKU.
Before you begin
Before setting up the template, make sure that:
- The official Shopify Order Printer app is installed on your store.
- The order was created using the current version of uShopAid.
- You have permission to create or edit Order Printer templates.
- You have a test order containing two or more bundles so you can verify the grouping result.
Create the uShopAid bundle printing template
Step 1: Open Shopify Order Printer
From your Shopify admin, go to:
Apps > Order PrinterIf Order Printer isn't installed, install the official Shopify Order Printer app from the Shopify App Store first.
[Insert a screenshot showing how to open Order Printer]

Step 2: Create a new template
In Order Printer:
- Click Templates.
- Click Create a template.
- Enter the following template name:
uShopAid Bundle Pick List[Insert a screenshot of the Create a template page]

Step 3: Paste the complete template code
Delete all existing code from the Edit code area, and then paste the complete code below:
<style>
.ush-bundle-section {
margin: 0 0 20px;
border: 1px solid #d9d9d9;
border-radius: 6px;
overflow: hidden;
page-break-inside: avoid;
}
.ush-bundle-header {
padding: 10px 12px;
background: #f3f3f3;
border-bottom: 1px solid #d9d9d9;
font-size: 15px;
font-weight: bold;
}
.ush-item-count {
color: #555;
font-size: 13px;
font-weight: normal;
}
.ush-bundle-table {
width: 100%;
margin: 0;
border-collapse: collapse;
table-layout: fixed;
}
.ush-bundle-table th,
.ush-bundle-table td {
padding: 9px 7px;
border-bottom: 1px solid #e5e5e5;
vertical-align: middle;
overflow-wrap: anywhere;
}
.ush-bundle-table tr:last-child td {
border-bottom: 0;
}
.ush-bundle-table th {
color: #555;
font-size: 12px;
font-weight: bold;
text-align: left;
}
.ush-product-image {
display: block;
width: 48px;
height: 48px;
object-fit: cover;
border: 1px solid #e5e5e5;
border-radius: 4px;
}
.ush-item-title {
font-weight: bold;
}
.ush-empty-value,
.ush-no-image {
color: #999;
}
.ush-no-image {
font-size: 11px;
}
@media print {
.ush-bundle-section {
page-break-inside: avoid;
}
.ush-product-image,
.ush-bundle-header {
print-color-adjust: exact;
-webkit-print-color-adjust: exact;
}
}
</style>
<div>
<div class="columns">
<h1>uShopAid Bundle Pick List</h1>
<div class="address">
<p style="text-align: right; margin: 0;">
{{ "packing_slip_template.order_label" | t }}
{{ order.order_name }}<br>
{% if order.po_number %}
{{ "packing_slip_template.po_number_label" | t }}
{{ order.po_number }}<br>
{% endif %}
{{ order.created_at | date: "%B %e, %Y" }}
</p>
</div>
</div>
<div class="columns" style="margin-top: 1.5em;">
<div class="address">
<strong>{{ "packing_slip_template.from_label" | t }}</strong><br>
{{ shop.name }}<br>
{{ shop.address | format_address }}
</div>
{% if order.shipping_address %}
<div class="address">
<strong>{{ "packing_slip_template.ship_to_label" | t }}</strong>
{{ order.shipping_address | format_address }}
</div>
{% endif %}
</div>
<hr>
<h2>{{ "packing_slip_template.order_details_title" | t }}</h2>
{% assign processed_bundle_units = "|" %}
{% assign bundle_found = false %}
{% for line_item in order.line_items %}
{% assign bundle_unit = line_item.properties['_ush_bundle_unit'] %}
{% if bundle_unit != blank %}
{% assign bundle_found = true %}
{% assign bundle_token = bundle_unit | prepend: "|" | append: "|" %}
{% unless processed_bundle_units contains bundle_token %}
{% assign processed_bundle_units = processed_bundle_units | append: bundle_unit | append: "|" %}
{% assign bundle_item_count = 0 %}
{% for count_item in order.line_items %}
{% assign count_bundle_unit = count_item.properties['_ush_bundle_unit'] %}
{% if count_bundle_unit == bundle_unit %}
{% assign bundle_item_count = bundle_item_count | plus: count_item.quantity %}
{% endif %}
{% endfor %}
<div class="ush-bundle-section">
<div class="ush-bundle-header">
Pack these items together
<span class="ush-item-count">
· {{ bundle_item_count }}
{% if bundle_item_count == 1 %}item{% else %}items{% endif %}
</span>
</div>
<table class="ush-bundle-table">
<thead>
<tr>
<th style="width: 12%;">Image</th>
<th style="width: 8%;">Qty</th>
<th style="width: 35%;">Item</th>
<th style="width: 25%;">Variant</th>
<th style="width: 20%;">SKU</th>
</tr>
</thead>
<tbody>
{% for bundle_item in order.line_items %}
{% assign current_bundle_unit = bundle_item.properties['_ush_bundle_unit'] %}
{% if current_bundle_unit == bundle_unit %}
<tr>
<td>
{% if bundle_item.product.featured_image %}
{{ bundle_item.product.featured_image
| product_img_url: 'thumb'
| img_tag: bundle_item.product.title, 'ush-product-image'
}}
{% else %}
<span class="ush-no-image">No image</span>
{% endif %}
</td>
<td>{{ bundle_item.quantity }}</td>
<td>
<div class="ush-item-title">
{% if bundle_item.product.title != blank %}
{{ bundle_item.product.title }}
{% else %}
{{ bundle_item.title }}
{% endif %}
</div>
</td>
<td>
{% if bundle_item.variant and bundle_item.variant.title != blank and bundle_item.variant.title != "Default Title" %}
{{ bundle_item.variant.title }}
{% else %}
<span class="ush-empty-value">—</span>
{% endif %}
</td>
<td>
{% if bundle_item.sku != blank %}
{{ bundle_item.sku }}
{% else %}
<span class="ush-empty-value">—</span>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
{% endunless %}
{% endif %}
{% endfor %}
{% assign regular_item_count = 0 %}
{% for line_item in order.line_items %}
{% assign bundle_unit = line_item.properties['_ush_bundle_unit'] %}
{% if bundle_unit == blank %}
{% assign regular_item_count = regular_item_count | plus: line_item.quantity %}
{% endif %}
{% endfor %}
{% if regular_item_count > 0 %}
<div class="ush-bundle-section">
<div class="ush-bundle-header">
Other items
<span class="ush-item-count">
· {{ regular_item_count }}
{% if regular_item_count == 1 %}item{% else %}items{% endif %}
</span>
</div>
<table class="ush-bundle-table">
<thead>
<tr>
<th style="width: 12%;">Image</th>
<th style="width: 8%;">Qty</th>
<th style="width: 35%;">Item</th>
<th style="width: 25%;">Variant</th>
<th style="width: 20%;">SKU</th>
</tr>
</thead>
<tbody>
{% for line_item in order.line_items %}
{% assign bundle_unit = line_item.properties['_ush_bundle_unit'] %}
{% if bundle_unit == blank %}
<tr>
<td>
{% if line_item.product.featured_image %}
{{ line_item.product.featured_image
| product_img_url: 'thumb'
| img_tag: line_item.product.title, 'ush-product-image'
}}
{% else %}
<span class="ush-no-image">No image</span>
{% endif %}
</td>
<td>{{ line_item.quantity }}</td>
<td>
<div class="ush-item-title">
{% if line_item.product.title != blank %}
{{ line_item.product.title }}
{% else %}
{{ line_item.title }}
{% endif %}
</div>
</td>
<td>
{% if line_item.variant and line_item.variant.title != blank and line_item.variant.title != "Default Title" %}
{{ line_item.variant.title }}
{% else %}
<span class="ush-empty-value">—</span>
{% endif %}
</td>
<td>
{% if line_item.sku != blank %}
{{ line_item.sku }}
{% else %}
<span class="ush-empty-value">—</span>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% unless bundle_found %}
{% if regular_item_count == 0 %}
<p style="margin-top: 1em; color: #666;">No items were detected in this order.</p>
{% endif %}
{% endunless %}
</div>
Step 4: Preview the template
Click Preview, and then select a real test order containing uShopAid bundles.
Check the following:
- Products from the same bundle appear in the same section.
- Different bundles appear in separate sections.
- The item count is correct, such as
2 itemsor3 items. - Product images, quantities, product names, variants, and SKUs display correctly.
- Products that aren't part of a bundle appear under Other items.
- No products are missing or duplicated.
[Insert the template preview screenshot here]

Step 5: Save the template
After confirming that the preview is correct, click Save.
When you need to print an order, open Order Printer from the Shopify order page and select:
uShopAid Bundle Pick ListHow the template identifies items from the same bundle
uShopAid adds an internal _ush_bundle_unit identifier to the relevant order line items. The template compares this identifier automatically:
- Items with the same identifier appear in the same Pack these items together section.
- Items with different identifiers appear in separate sections.
- Items without the identifier appear under Other items.
You don't need to view, copy, or edit this identifier. It is used only to group the products and isn't printed on the final document.
Understanding Item, Variant, and SKU
The template displays the following information:
Column | What it displays |
|---|---|
Image | The product's featured image |
Qty | The quantity purchased |
Item | The Shopify product name |
Variant | A color, size, or other variant option, such as |
SKU | The inventory code entered for the product variant in Shopify |
If Variant or SKU displays |
Frequently asked questions
Why aren't the products grouped together?
Confirm that the order was created using the current version of uShopAid. The template relies on the _ush_bundle_unit identifier. Historical orders created before this unified identifier was introduced might not contain it, so their products might appear under Other items.
If the order is new and the products still aren't grouped correctly, contact the uShopAid support team and provide an order screenshot and the template preview result.
Why isn't the product image displayed?
The template reads the product's featured image from Shopify. If the product doesn't have a featured image, the template displays No image.
If the image appears in Preview but not on the printed page or PDF, check your browser's print settings and try enabling Background graphics.
Why does Variant contain a value while SKU displays —?
Variant and SKU are separate fields. For example, Gold is a variant option, while the SKU is an inventory code entered by the merchant for that variant. A product can have a variant without having a SKU.
How is the item count calculated?
The X items value is the total purchased quantity of all products in that bundle group. For example, if one product has a quantity of 2 and another has a quantity of 1, the heading displays:
Pack these items together · 3 itemsDoes this template change order or fulfillment data?
No. The template only changes how the order is printed. It doesn't change the Shopify order, products, inventory, discounts, or fulfillment data.
Related Shopify resources
- Creating and editing templates using Shopify Order Printer
- Setting up and printing pick lists using Shopify Order Printer
- Shopify Order Printer Liquid variables and filters reference
Conclusion
After you set up the template once, Shopify Order Printer can automatically display products from the same uShopAid bundle together. Your fulfillment team can use each Pack these items together section as a clear picking and packing instruction without checking internal order properties or identifying the bundle type.
This makes orders containing multiple bundles, different products, or different product variants easier to review and fulfill.
Updated on: 28/08/2026
Thank you!