The gift note the warehouse never saw
Date
14 Aug 2026
Category
Gotcha
Platform
Shopify
A store had a gift message field on the cart. It worked. Customers filled it in, the message saved against the order, and it was visible in the admin under Additional details. What was not working was the only part that counted: it never appeared on the packing slip, so the person packing the box was working from a document that did not mention it.
What we found
Shopify’s built-in packing slip template can only see a fixed set of variables, and cart attributes are not among them. The template exposes the order note and the properties attached to each line item. It does not expose attributes, and there is no way to add them. Shopify’s own guidance is to use order metafields instead.
That produces a genuinely confusing situation for a merchant, because the message is plainly there on the order screen. Nothing has failed, nothing has errored, the data is stored correctly. It simply lives in the one place the printing template cannot reach. The usual workaround a store lands on by itself is copying the message into the order notes by hand, once per order, forever.
Where the message was captured turns out to decide everything downstream. Posted as the cart note, it lands in Notes and prints. Posted as a cart attribute, it lands in Additional details and does not. Attached to a line item as a property, it prints against that item. Written to an order metafield, it prints.
What we did
Took the cheapest of the four routes: posted the same message to both places at once, keeping the attribute so nothing else that reads it back broke, and adding the note so the slip picks it up. One field to the customer, two destinations behind it.
Two things nearly cost more time than the fix. A textarea can only carry one name, so writing to both means a visible field for one and a hidden field for the other, kept in sync. And a duplicate note field elsewhere in the same form will silently overwrite the real one, with the last field in the form winning. Legacy cart drawer snippets often still carry one.
What to take from it
Before touching any of this, establish how the merchant actually prints. Several of the print apps can read attributes perfectly well, in which case there is no theme work at all and the fix is a template edit inside the app. Asking that question first is the difference between a five-minute job and a build.