在 Shopify 中。
如果用户未登录,我的网站会隐藏价格。我到处都有隐藏价格,但我只需在
window.ShopifyAnalytics.meta
(元价格)中执行,它显示为 json。
我最终看到了这个结构:
<script>
window.ShopifyAnalytics = window.ShopifyAnalytics || {};
window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
window.ShopifyAnalytics.meta.currency = 'USD';
var meta = {"product":{
...
};
for (var attr in meta) {
window.ShopifyAnalytics.meta[attr] = meta[attr];
}
</script>
但是我如何隐藏这里的价格?
{% if customer == null %}
<script>
window.ShopifyAnalytics = window.ShopifyAnalytics || {};
window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
setTimeout(function()
{
delete window.ShopifyAnalytics.meta.product
}, 100);
</script>
{% endif %}
将其粘贴到 theme.liquid 的 head 标签上。
在单击 > 以在 console.log 上显示对象树之前,尚未评估该值
在 theme.liquid 文件的 .. 标签内添加以下代码。
{% if customer == null %}
<script>
new function(){
const me=this;
const config = { attributes: false, childList: true, subtree: false };
me.init=()=>{
me.addObserver(document.querySelector("head"),config,me.callback)
}
me.callback = (mutationsList, observer)=> {
// Use traditional 'for loops' for IE 11
for(const mutation of mutationsList) {
let target=mutation.target;
if (mutation.type === 'childList') {
if( if(window.ShopifyAnalytics && window.ShopifyAnalytics.meta){
let targetScript=target.querySelector("#web-pixels-manager-setup")
window.ShopifyAnalytics.meta["product"].variants=[];
me.stop(observer);
}
}
}
};
me.stop=(observer)=>{observer.disconnect();};
me.addObserver=(target, config,callback)=>{
console.log("add observer",target);
const observer = new MutationObserver(callback);
observer.observe(target, config);
};
me.init();
document.addEventListener('DOMContentLoaded', me.initReady, false);
}
</script>
{% endif %}
它创建一个观察者来检查子元素是否添加到头部。 添加子项后,它会检查 window.ShopifyAnalytics.meta 是否存在,当存在时,产品变体将被清除为空数组。 并且仅当用户登录时才会执行此操作