Articles on: Troubleshooting

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.

This template works with uShopAid Mix & Match Bundles, Product Bundles, Classic Bundles, and Volume Discounts created using the current version of uShopAid. You don't need a separate template for each bundle type.

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.
Shopify's standard Pick list template can be customized using its built-in options, but it doesn't support custom Liquid code. For this reason, you need to create a regular custom Order Printer template instead of editing the Pick list template.

Create the uShopAid bundle printing template

Step 1: Open Shopify Order Printer

From your Shopify admin, go to:

Apps > Order Printer

If 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:

  1. Click Templates.
  2. Click Create a template.
  3. Enter the following template name:
uShopAid Bundle Pick List

[Insert a screenshot of the Create a template page]


We recommend creating a new template instead of replacing Shopify's default Packing slip. This lets you keep the original template available whenever you need it.

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 items or 3 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 List

How 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 Gold, Silver, or Medium

SKU

The inventory code entered for the product variant in Shopify

If Variant or SKU displays , it usually means that the product doesn't have variant information or that no SKU has been entered. It doesn't mean that the template has failed.

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 items

Does 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.

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

Was this article helpful?

Share your feedback

Cancel

Thank you!