Show Customizations in Order Confirmation Emails

Add Podifai selections, uploads, and Live Preview images to a Shopify order confirmation email.

Last updated: 2026-09-13

Shopify stores Podifai choices as line item properties. If your notification template contains the matching code, follow the find-and-replace steps below to reveal Shopify's existing property loops, add the loops missing from bundle components, and show uploaded files and final Live Preview images in the order confirmation email.

This guide is designed for Shopify's default or lightly customized Order confirmation template and might not apply to stores with a fully customized notification template. If you cannot find the exact code shown below, do not force the replacement or paste the snippets into an arbitrary location. Contact Podifai Support so we can review your template and recommend a store-specific fallback.
Back up the complete Order confirmation template before editing it. Shopify's Revert to default action removes all custom code, including this change.

What This Change Does

Shopify's order confirmation template already contains several loops that can display line item properties, but the default conditions can limit those loops to gift card data. This process opens the existing property gates and adds a property loop only where a bundle component does not already have one.

  • Text, swatches, dropdown selections, and other values appear as a label and value.
  • Customer upload URLs appear as clickable file names.
  • A property whose name contains Live Preview Image appears as a clickable thumbnail.
  • Blank properties and property names beginning with _ are hidden.

The underscore check is important. Podifai uses private properties such as _Podifai Embedded and _podifai_all_attributes for app and fulfillment data. Customers generally should not see those internal values in their confirmation email.

1. Open and Back Up the Template

  1. In Shopify Admin, go to Settings → Notifications.
  2. Open Customer notifications, then select Order confirmation.
  3. Click Edit code.
  4. Copy the complete template into a plain-text file and save it as your backup.

Shopify's interface can vary slightly by admin version. See Shopify's notification template guide if the menu labels in your store are different.

2. Reveal the Existing Property Loops

In the template editor, search for gift_card and. Change the opening condition at every matching property loop. Most matches use line; at least one template branch can use component.

Standard line item gate

Find:

{% if line.gift_card and line.properties["__shopify_send_gift_card_to_recipient"] %}

Replace with:

{% if line.properties %}

Component gate

Find:

{% if component.gift_card and component.properties["__shopify_send_gift_card_to_recipient"] %}

Replace with:

{% if component.properties %}
Replace only the opening condition. Leave the property loop and its closing endif unchanged. Match counts can vary by Shopify template version, so update every exact match instead of relying on a fixed number.
If you cannot find the exact gift-card conditions shown above, do not insert a property loop in an arbitrary location. Your store might use an older or previously customized notification template. Send the relevant product block to Podifai Support for review.

If a gate already reads {% if line.properties %} or {% if component.properties %}, it has already been updated. Do not add another loop beside it.

3. Add the Property Loop Missing from Bundle Components

Some bundle-component snippets do not contain a property loop at all. Search for the following line; each match identifies a component snippet to inspect:

<span class="order-list__item-variant">{{ component.variant.title }}</span>

Find the endif that closes the surrounding variant-title condition. If that component snippet does not already contain {% if component.properties %}, paste the following block immediately after the closing endif:

{% if component.properties %}
  {% for property in component.properties %}
    {% assign property_first_char = property.first | slice: 0 %}
    {% if property.last != blank and property_first_char != '_' %}
      <div class="order-list__item-property">
        <dt>{{ property.first }}:</dt>
        <dd>
          {% if property.last contains '/uploads/' %}
            <a href="{{ property.last }}" class="link" target="_blank">{{ property.last | split: '/' | last }}</a>
          {% else %}
            {{ property.last }}
          {% endif %}
        </dd>
      </div>
    {% endif %}
  {% endfor %}
{% endif %}

Repeat this check for every matching component snippet. Do not add a second property loop when one is already present.

4. Render the Live Preview as an Image

Search for the upload condition below. Replace it at every match, including the component loops added in Step 3.

Find:

{% if property.last contains '/uploads/' %}

Replace with:

{% if property.first contains 'Live Preview Image' %}
  <a href="{{ property.last }}" target="_blank"><img src="{{ property.last }}" width="70" style="max-width:70px;height:auto;border:1px solid #e5e5e5;display:block;margin-top:2px;"/></a>
{% elsif property.last contains '/uploads/' %}

The last line changes the original upload condition from if to elsif. This preserves the existing else and endif below it: Live Preview URLs render as images, upload URLs remain clickable files, and other values remain text.

5. Prevent Duplicate Colons

A label that already ends with a colon can otherwise appear as Choose quote:: value. Search for the following label at every property loop.

Find:

<dt>{{ property.first }}:</dt>

Replace with:

<dt>{% assign label_last_char = property.first | slice: -1 %}{{ property.first }}{% unless label_last_char == ':' %}:{% endunless %}</dt>

6. Preview, Save, and Test

  1. Click Preview and confirm that Shopify reports no Liquid or HTML errors.
  2. Save the template.
  3. Place a real test order for a Podifai product after saving the template.
  4. Include a text choice whose label ends with a colon, an uploaded file, and Live Preview when available.
  5. Confirm that readable selections appear once and properties beginning with _ stay hidden.
  6. Check the received email on desktop and mobile, including the preview thumbnail and upload link.
  7. Test pickup, local delivery, split delivery, and bundle orders when your store uses those workflows.
  8. Confirm that the same selections also appear in Podifai Orders and Shopify Admin.
Shopify's built-in preview commonly uses sample data without Podifai properties. A clean preview proves that the template renders; the real test order proves that the customization data appears.

Troubleshooting

No customization values appear

  • Confirm the test order was placed after the template was saved.
  • Open the order in Shopify Admin and confirm the line item contains the expected properties.
  • Search again for the original gift-card condition and update any remaining matches.
  • Check whether the order used a component branch that still has no property loop.

The Live Preview thumbnail does not load

Confirm that the property name contains Live Preview Image and that its value is a public HTTPS image URL. Some email clients block remote images until the recipient chooses to display them; the image remains clickable when the client permits the link.

Values appear twice

A second property loop might have been added beside Shopify's existing loop instead of opening the existing gift-card gate. Keep only one line.properties or component.properties loop in each rendering branch, and use the gate replacement from Step 2.

Maintain the Custom Template

Keep the backup and a copy of these find-and-replace steps. Shopify occasionally changes its default notification templates, while customized templates can require manual updates. After a major Shopify notification change, compare your template with the current default and reapply only the changes that are still needed.

Shopify reference: line item properties in notification templates.

FAQ

Why do I need to update more than one place in the template?

Shopify's order confirmation template has separate rendering branches for standard products, split deliveries, pickups, and line item groups. Open every matching line and component property gate, then add the component loop only to bundle snippets that do not already have one.

Why are properties beginning with an underscore hidden?

Properties beginning with an underscore contain app or workflow metadata. The snippet intentionally excludes them so customers see their readable selections instead of Podifai's internal data.

Why don't Podifai values appear in Shopify's preview email?

Shopify's preview uses sample order data and might not include Podifai line item properties. Use Preview to check the template layout and syntax, then place a real test order for a customized product to verify the values.

Will this also change old order confirmation emails?

No. The change applies only when Shopify renders a notification after the template is saved. It does not rewrite emails that were already sent.