I am using the ‘Loft’ theme on Shopify. When I select a variant on the product page, the them updates the SKU and the price to that variant I need more functionality than this, as I would like to show the dimensions of each variant using metafields.
I have created a function and called it on variant select like this:
jQuery(function($) {
new Shopify.OptionSelectors('productSelect', {
product: {{ product | json }},
onVariantSelected: selectCallback,
enableHistoryState: true
});
});
My function is called and I can perform my desired actions. But this stops the default actions from happening, like updating the price and SKU. Is there a way I can call both?
2
Answers
The recipe for you is as follows. When the original Liquid renders (happens once), you save the product as json into some Javascript variable. You have the extra task of looping through the variants, and assigning each variant their metafields. To make your life easier, you could’ve selected to save the variant dimensions as a JSON_STRING metafield at the product level, where the variant ID is your key and the dimensions are the value.
Nonetheless, you save the dimensions keyed to the variant ID. Now when the selector change event occurs, you are handed the variant on a platter in the existing option selector callback. Write yourself a function that uses the provided variant ID to get the dimensions from your already saved object. With those values, update the DOM and you’re done.
There are a number of ways to make this work.
Firstly you need to be aware of how your theme is natively handling variants. For loft it uses the theme.Variant object so custom variant selection is as easy as:
For themes that use the old Shopify.OptionSelectors you can either do this old school by overriding the
selectCallback
global function like:Finally most modern themes that I’ve dealt with and themes that use Shopify.OptionSelectors with
enableHistoryState: true
allow you to skip the messiness of overrides and install your own history handler. Here is where you’d need to have your own script/liquid assemble the JSON you’d need for getting variant and product properties: