选择变体时 Shopify SKU 不更新
Shopify SKU not updating when variant is selected
我正在调用一个产品 SKU 编号,当根据 this Shopify tutorial 选择变体时,该编号应该会更改。
按照指示,我将以下代码片段放在我希望 SKU 显示的位置:
{% assign current_variant = product.selected_or_first_available_variant %}
<span class="variant-sku">{{ current_variant.sku }}</span>
但是,当变体更改时,SKU 永远不会像在他们的教程的 gif 中那样更新。
网站上有 an example 它无法正常工作。
此外,这是一张截图,显示该选项确实是 Shopify 变体而不是其他东西(只是为了涵盖我的所有基础)。
我唯一的猜测是 Shopify 可能已经改变,现在的做法有所不同,或者我以某种方式设置不正确,尽管我已经按照教程的说明(放置在产品中-template.liquid ,引用自 product.liquid(主题已分段)。
我最近才开始使用 Shopify,但我会尽力提供帮助。我确实注意到您使用的是 current_variant.sku
,但 Shopify 的对象引用 material 说要使用 variant.sku
。这是我找到它的地方:
https://help.shopify.com/themes/liquid/objects/variant#variant-sku
希望对您有所帮助。
我从未编辑过此网站的 Assets/theme.js 文件,而且我很确定除了我自己之外没有其他人接触过任何文件。
尽管 theme.js 文件中遗漏了一个非常重要的函数,该函数是变体更改 sku 所必需的。
我的 theme.js 文件中似乎没有安装这些行:
_updateSKU: function(variant) {
if (variant.sku === this.currentVariant.sku) {
return;
}
this.$container.trigger({
type: 'variantSKUChange',
variant: variant
});
},
此外,对于 _initVarients
函数,缺少以下内容(与具有相同代码类型的其他行放在一起):
this.$container.on('variantSKUChange' + this.settings.namespace, this._updateSKU.bind(this));
这些在我的 theme.js 文件中并没有丢失,但值得检查,因为它们是 SKU 更新所必需的:
位于_onSelectChange
函数内部(与其他具有相同类型代码的行放在一起):
this._updateSKU(variant);
位于_updatePrice
函数之后:
_updateSKU: function(evt) {
var variant = evt.variant;
// Update the sku
$('.variant-sku').html(variant.sku);
},
// Variant is sold out, disable the submit button
// $addToCart.addClass('disabled').prop('disabled', true);
$addToCart.hide();
$variantQuantity.removeClass('is-visible');
if (variant.incoming) {
$variantQuantity.html({{ 'products.product.will_be_in_stock_after' | t: date: '[date]' | json }}.replace('[date]', variant.next_incoming_date)).addClass('is-visible');
}
else {
$variantQuantity.removeClass('is-visible');
}
$quantityElements.hide();
$outofstock.show();
}
//console.log(variant.sku);
$('.variant-sku').html("");
$('.variant-sku').text(variant.sku);
// Update price display.
var customPrice = Shopify.formatMoney(variant.price, theme.moneyFormat);
if (variant.compare_at_price > variant.price) {
var comparePrice = Shopify.formatMoney(variant.compare_at_price, theme.moneyFormat);
var customPriceFormat = ' <del id="old-product-price">' + comparePrice + '</del>';
customPriceFormat += ' <ins id="product-price">' + customPrice + '</ins>';
$productPrice.html(customPriceFormat);
var save = ((variant.compare_at_price - variant.price)*100)/variant.compare_at_price;
$('#product-{{product.id}} .product-image-summary .onsale').html({{ 'products.product.save_js' | t: saved_amount: '[sale]' | json }}.replace('[sale]', Math.ceil(save))).show();
}else{
$productPrice.html(customPrice);
$('#product-{{product.id}} .product-image-summary .onsale').hide();
}
jQuery('.currency .active').trigger('click');
//Update sku
if(variant.sku){
$productsku.text(variant.sku);
}else{
$productsku.text(theme.strings.na);
}
我发现 produc_js.liquid 片段需要更新。
enter image description here
我正在调用一个产品 SKU 编号,当根据 this Shopify tutorial 选择变体时,该编号应该会更改。
按照指示,我将以下代码片段放在我希望 SKU 显示的位置:
{% assign current_variant = product.selected_or_first_available_variant %}
<span class="variant-sku">{{ current_variant.sku }}</span>
但是,当变体更改时,SKU 永远不会像在他们的教程的 gif 中那样更新。
网站上有 an example 它无法正常工作。
此外,这是一张截图,显示该选项确实是 Shopify 变体而不是其他东西(只是为了涵盖我的所有基础)。
我唯一的猜测是 Shopify 可能已经改变,现在的做法有所不同,或者我以某种方式设置不正确,尽管我已经按照教程的说明(放置在产品中-template.liquid ,引用自 product.liquid(主题已分段)。
我最近才开始使用 Shopify,但我会尽力提供帮助。我确实注意到您使用的是 current_variant.sku
,但 Shopify 的对象引用 material 说要使用 variant.sku
。这是我找到它的地方:
https://help.shopify.com/themes/liquid/objects/variant#variant-sku
希望对您有所帮助。
我从未编辑过此网站的 Assets/theme.js 文件,而且我很确定除了我自己之外没有其他人接触过任何文件。
尽管 theme.js 文件中遗漏了一个非常重要的函数,该函数是变体更改 sku 所必需的。
我的 theme.js 文件中似乎没有安装这些行:
_updateSKU: function(variant) {
if (variant.sku === this.currentVariant.sku) {
return;
}
this.$container.trigger({
type: 'variantSKUChange',
variant: variant
});
},
此外,对于 _initVarients
函数,缺少以下内容(与具有相同代码类型的其他行放在一起):
this.$container.on('variantSKUChange' + this.settings.namespace, this._updateSKU.bind(this));
这些在我的 theme.js 文件中并没有丢失,但值得检查,因为它们是 SKU 更新所必需的:
位于_onSelectChange
函数内部(与其他具有相同类型代码的行放在一起):
this._updateSKU(variant);
位于_updatePrice
函数之后:
_updateSKU: function(evt) {
var variant = evt.variant;
// Update the sku
$('.variant-sku').html(variant.sku);
},
// Variant is sold out, disable the submit button
// $addToCart.addClass('disabled').prop('disabled', true);
$addToCart.hide();
$variantQuantity.removeClass('is-visible');
if (variant.incoming) {
$variantQuantity.html({{ 'products.product.will_be_in_stock_after' | t: date: '[date]' | json }}.replace('[date]', variant.next_incoming_date)).addClass('is-visible');
}
else {
$variantQuantity.removeClass('is-visible');
}
$quantityElements.hide();
$outofstock.show();
}
//console.log(variant.sku);
$('.variant-sku').html("");
$('.variant-sku').text(variant.sku);
// Update price display.
var customPrice = Shopify.formatMoney(variant.price, theme.moneyFormat);
if (variant.compare_at_price > variant.price) {
var comparePrice = Shopify.formatMoney(variant.compare_at_price, theme.moneyFormat);
var customPriceFormat = ' <del id="old-product-price">' + comparePrice + '</del>';
customPriceFormat += ' <ins id="product-price">' + customPrice + '</ins>';
$productPrice.html(customPriceFormat);
var save = ((variant.compare_at_price - variant.price)*100)/variant.compare_at_price;
$('#product-{{product.id}} .product-image-summary .onsale').html({{ 'products.product.save_js' | t: saved_amount: '[sale]' | json }}.replace('[sale]', Math.ceil(save))).show();
}else{
$productPrice.html(customPrice);
$('#product-{{product.id}} .product-image-summary .onsale').hide();
}
jQuery('.currency .active').trigger('click');
//Update sku
if(variant.sku){
$productsku.text(variant.sku);
}else{
$productsku.text(theme.strings.na);
}
我发现 produc_js.liquid 片段需要更新。
enter image description here