Shopify技术问题:购物车页面如何正确读取店铺级disabledDates元字段
问题描述
我在Shopify店铺层级创建了用于存储禁用日期的元字段,但在购物车页面代码中使用{{ shop.metafields.disabledDates.value }}无法读取该元字段内容,附上购物车页面的代码片段:
window.addEventListener("load", function() { // Don't add 0 before month and date to make it two digit. //var disabledDays = ["2022-5-30","2022-7-4","2022-9-5","2022-11-24","2022-12-23","2022-12-24","2022-12-25","2022-12-30","2022-12-31","2023-1-1","2023-1-2"]; disabledDays = {{ shop.metafields.disabledDays.value }}; var minDate = new Date(); var maxDate = new Date(); maxDate.setDate((maxDate.getDate()) + 60); minDaysToShip = 2; // Default minimum days if (minDate.getDay() == 5) { // Friday. Set min day to Tuesday. 4 days from now. minDaysToShip = 4; } else if (minDate.getDay() == 6) {
解决方法
核对元字段命名与调用路径
代码中写的是shop.metafields.disabledDays.value,但你描述里元字段叫disabledDates,先确认键名完全一致(Shopify元字段键名区分大小写)。另外必须带上命名空间,正确格式是{{ shop.metafields.命名空间.键名.value }},比如你的元字段命名空间是custom、键是disabled_dates,就要写成{{ shop.metafields.custom.disabled_dates.value }}。你可以去Shopify后台「设置→元字段→店铺」查看对应元字段的命名空间和键名,确保完全匹配。用JSON过滤器处理数组格式
如果元字段存储的是日期数组,要确保它的类型是JSON而非单行文本。输出到JS变量时必须加上json过滤器,避免Liquid输出的内容导致JS语法错误:disabledDays = {{ shop.metafields.custom.disabled_dates.value | json }};检查元字段可见性
确认元字段的可见性设置为「商店front end」或「所有」,如果设为「仅商店admin」,前端Liquid代码无法读取该字段。调试输出验证
可以先在页面中临时添加{{ shop.metafields.custom.disabled_dates.value | inspect }},查看实际渲染的内容,判断是字段不存在还是格式错误。
内容的提问来源于stack exchange,提问作者Pramod Gangadar

