Hey Shopifolk!
A thought come up as I am working on copying things from a Production store to a Staging (dev) store.
It would be great if we could have the ability for the notification email templates to utilize Shop metafields (at least).
In this particular instance, we have separate images meant for certain bundle products and we need to use the absolute URL of the image there, which is fine but because we cannot use a Shop metafield for the URL we need to adjust it for each affected template between the stores manually rather than just copying-and-pasting-and-saving the template itself.
(To be clear, I am fine with doing that, but for me it’s more of a reusability/reducing room for user error sort of feature request. Also, yes I could duplicate the templates and do a find-and-replace-all for them, then copy them over, but this is more for reusability without needing to do something like that — especially when thinking about using even more similar customizations among the majority of notification templates.)
Thanks in advance! (Personally hoping this sort of feature could make its way in before the Winter Editions 2026.)
(P.S. when originally modifying the default templates a few months ago, I noticed several things that did not seem to be part of the documentation within the help center. I also guessed as to some undocumented functionality that could help with replacing the images like I did and it worked. It would also be nice if the documentation could be revised to include those sorts of details too rather than having us guess & check and hope it continues to work…)
1 Like
Hey Rob, interesting idea that makes swapping between prod and staging easier. I assume you want to do something like Metafield shop value = <some constant in the domain/path> and then allow you to prefix a URL with that value across Shops.
I may need a bit more context to fully understand what you have in mind for practical implementation. Can you provide some sample code or some examples of the workflow that you had in mind that will help me understand your proposed solution?
Hey James,
Upfront, it is meant more for having the same Shop metafields on both shops but being able to use the values of them within the notification email templates directly. Something like shop.metafields.custom.white_glove_bundle_image (or as _image_url instead if the object itself would not be usable there) within the code of the notification template.
In my case, I needed to loop through the components of a bundle and check for the tags of the product to contain a certain tag (which I believe was undocumented functionality) such as “White Glove” to denote that the type of bundle is a “White Glove” bundle and therefore use the associated image instead of whatever image may have been default.
Currently I needed to hard-code in the image URLs, tags, and bundle types. When added separately to 20 different templates it means that if any needed to be changed it would need to happen across all 20 templates, something where dynamic values you only update once via a Shop metafield would be beneficial (especially being able to use list metafields enabling nice looping within the template).
Totally dig the feature, who doesn’t love more metafield/metaobject support hehe
On another note, in the meantime, you could leverage the theme locales to store the CDN media URLs, that would still be hardcoding but with Github integratio, at least it would be shared between stores. Just food for thought !
Hey @James_Lunan,
I just wanted to check back in to see if I provided enough detail for you above. Thanks!
You did, Rob. Thank you. I’m chasing down the team who owns this to get it into their backlog, or to see if they have any additional information.
Hey @James_Lunan,
Thanks for the update!
I did just update 4 notification templates for a merchant this morning and needed to include “product recommendations” (different for each one). In this case it required manual inclusion of the image source URL, the product URL (handle), and the title to display. (I did make arrays of objects that could be looped over to display them, so at least the content is all in the same spot near the top of the template. The main pain point there would be the need to manually fetch and add each part.)
Ideally for something like that we would be able to use a few collection or product list Shop metafields that could be updated without needing to touch the template code. Potentially via workflow automation where, the products could change based on events that occur. Think like being able to display bestsellers, or new releases that may change over time. Being able to access metaobjects would also be helpful because you could set up a relatively reusable template and have various parts of content be pulled from a metaobject entry (that could be updated via workflow automation whenever things needed to change).
Personally I just hope such an addition (or multiple with including metaobject access) would be a relatively small lift given that order metafields can already be accessed.
Are you sure this isn’t already a thing?
In a custom app we build for each merchant we have a CSS editor that saves the content to shop.metafields.emails.notification_style and we then use it like so:
<style>
{{ shop.metafields.emails.notification_style }}
</style>
which works fine.
Is the issue more that you couldn’t use a file reference metafield to get something?
Thanks for sharing this, Rob. I agree — having access to Shop metafields in notification templates would make things a lot smoother, especially when working across multiple stores. It would save time and help avoid small errors. Better documentation around this would be really helpful too. Appreciate you raising it.
Hey @DanGamble,
When I tried pulling metafield content with a different namespace it was not working.
That said, I just tried similar to your example and it seemed to work with at least outputting text. What I tried before was to use the .value which did not and does not work, at least with a single_line_text_field but apparently without that it does output the content.
I will try storing some things and then pulling them in and report back.
@James_Lunan regarding the metafields it may be fine, but I cannot seem to access metaobjects.
Hey @DanGamble & @James_Lunan,
After some testing it looks like it still is not quite what I was hoping for. I am currently unsure what is supported regarding the metafields, but the single_line_text_field at least not as a list seems to be supported when not accessing it with the .value. (Note, I did not test other metafield types aside from what I describe below.)
I tried to create a metaobject and a metaobject reference list Shop metafield, but I can only seem to get it to output gid://shopify/Metaobject/ references but not actually access the resource. Then I tired a product reference list Shop metafield (less desirable, because it will involve using multiple product metafields with extra data that could be stored in a metaobject entry, in this case specifically the image to display if not the product featured image, and the title to display if not using the product title) and it also only seemed to output the gid://shopify/Product/ references. Effectively, the details here did not seem to apply. (It seemed like it really did not like when I tried to use .value when attempting to access the data of the resources.)
So with the testing I did, it seems that at least one metafield type can be accessed (without using .value) in at least the order confirmation notification template.
If there is some documentation somewhere that describes how to get past just seeing the references then that would be great. If its simply not possible currently, having that functionality added along with being able to access metaobjects entries individually would be great!
Trying to help make sure email notification templates can be more dynamic has been fun so far! Thanks for your help!