← back to Designer Wallcoverings
Fix PDP spec rows rendering raw metafield envelope: read .value
aa0b60a0e1d79e9d41c598f53b15d888a246b1bc · 2026-06-24 15:10:22 -0700 · Steve
product-description-meta.liquid assigned bare metafield drops (e.g.
product.metafields.custom.material) then output them, so once a drop passed
through the default filter Shopify serialized the whole object —
{"type":"single_line_text_field","value":"Nonwoven"} — instead of the
value. Append .value to every metafield ref (dotted + bracket keys) in both
theme copies (_cwGRID + theme-5.0-duplicate). Verified: 0 bare refs, 0 doubles.
Stored data was already clean (read-only API check); render-only fix.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
M shopify/_cwGRID/snippets/product-description-meta.liquidM shopify/theme-5.0-duplicate/snippets/product-description-meta.liquid
Diff
commit aa0b60a0e1d79e9d41c598f53b15d888a246b1bc
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jun 24 15:10:22 2026 -0700
Fix PDP spec rows rendering raw metafield envelope: read .value
product-description-meta.liquid assigned bare metafield drops (e.g.
product.metafields.custom.material) then output them, so once a drop passed
through the default filter Shopify serialized the whole object —
{"type":"single_line_text_field","value":"Nonwoven"} — instead of the
value. Append .value to every metafield ref (dotted + bracket keys) in both
theme copies (_cwGRID + theme-5.0-duplicate). Verified: 0 bare refs, 0 doubles.
Stored data was already clean (read-only API check); render-only fix.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
.../snippets/product-description-meta.liquid | 40 +++++++++++-----------
.../snippets/product-description-meta.liquid | 40 +++++++++++-----------
2 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/shopify/_cwGRID/snippets/product-description-meta.liquid b/shopify/_cwGRID/snippets/product-description-meta.liquid
index 2b7c4150..cf16c0d8 100644
--- a/shopify/_cwGRID/snippets/product-description-meta.liquid
+++ b/shopify/_cwGRID/snippets/product-description-meta.liquid
@@ -10,25 +10,25 @@
{% comment %} DW Specs — canonical namespace: custom.* — falls back to specs.* then global.* for legacy products {% endcomment %}
{% assign has_specs = false %}
-{% assign w = product.metafields.custom.width | default: product.metafields.specs.width | default: product.metafields.global.Width | default: product.metafields.global.width %}
-{% assign mat = product.metafields.custom.material | default: product.metafields.specs.composition | default: product.metafields.global.Content | default: product.metafields.global.Contents | default: product.metafields.global.Construction %}
-{% assign col = product.metafields.custom.collection_name | default: product.metafields.specs.collection | default: product.metafields.global.Collection %}
-{% assign rep = product.metafields.custom.pattern_repeat | default: product.metafields.global.repeat | default: product.metafields.global['Vert-Rpt'] %}
-{% assign fin = product.metafields.custom.finish | default: product.metafields.specs.finish | default: product.metafields.global.Finish | default: product.metafields.global.FINISH %}
-{% assign care = product.metafields.custom.care | default: product.metafields.specs.care | default: product.metafields.global.Cleaning | default: product.metafields.global['Clean-Code'] | default: product.metafields.global['Cleaning-Code'] %}
-{% assign fire = product.metafields.custom.fire_rating | default: product.metafields.specs.fire_rating | default: product.metafields.global.fire_rating | default: product.metafields.global.FLAMMABILITY %}
-{% assign match = product.metafields.custom.match_type | default: product.metafields.specs.match_type | default: product.metafields.global.MATCH | default: product.metafields.global.Match %}
-{% assign app = product.metafields.custom.application | default: product.metafields.specs.application | default: product.metafields.global.application %}
-{% assign len = product.metafields.custom.length | default: product.metafields.global.length | default: product.metafields.global.Length %}
-{% assign pkg = product.metafields.custom.packaging | default: product.metafields.global.packaged | default: product.metafields.global.Packaged %}
-{% assign uom = product.metafields.custom.unit_of_measure | default: product.metafields.global.unit_of_measure %}
-{% assign coo = product.metafields.custom.origin | default: product.metafields.global.Country | default: product.metafields.global['Country-of-Origin'] %}
-{% assign dur = product.metafields.custom.wyzenbeek | default: product.metafields.global['Wyzenbeek-#'] %}
-{% assign mart = product.metafields.custom.martindale | default: product.metafields.global['Martindale-#'] %}
-{% assign abr = product.metafields.custom.abrasion | default: product.metafields.specs.abrasion %}
-{% assign bk = product.metafields.custom.backing | default: product.metafields.specs.backing | default: product.metafields.global.Substrate | default: product.metafields.global.substrate %}
-{% assign brand = product.metafields.custom.brand | default: product.metafields.global.Brand %}
-{% assign wt = product.metafields.custom.product_weight | default: product.metafields.global.Weight %}
+{% assign w = product.metafields.custom.width.value | default: product.metafields.specs.width.value | default: product.metafields.global.Width.value | default: product.metafields.global.width.value %}
+{% assign mat = product.metafields.custom.material.value | default: product.metafields.specs.composition.value | default: product.metafields.global.Content.value | default: product.metafields.global.Contents.value | default: product.metafields.global.Construction.value %}
+{% assign col = product.metafields.custom.collection_name.value | default: product.metafields.specs.collection.value | default: product.metafields.global.Collection.value %}
+{% assign rep = product.metafields.custom.pattern_repeat.value | default: product.metafields.global.repeat.value | default: product.metafields.global['Vert-Rpt'].value %}
+{% assign fin = product.metafields.custom.finish.value | default: product.metafields.specs.finish.value | default: product.metafields.global.Finish.value | default: product.metafields.global.FINISH.value %}
+{% assign care = product.metafields.custom.care.value | default: product.metafields.specs.care.value | default: product.metafields.global.Cleaning.value | default: product.metafields.global['Clean-Code'].value | default: product.metafields.global['Cleaning-Code'].value %}
+{% assign fire = product.metafields.custom.fire_rating.value | default: product.metafields.specs.fire_rating.value | default: product.metafields.global.fire_rating.value | default: product.metafields.global.FLAMMABILITY.value %}
+{% assign match = product.metafields.custom.match_type.value | default: product.metafields.specs.match_type.value | default: product.metafields.global.MATCH.value | default: product.metafields.global.Match.value %}
+{% assign app = product.metafields.custom.application.value | default: product.metafields.specs.application.value | default: product.metafields.global.application.value %}
+{% assign len = product.metafields.custom.length.value | default: product.metafields.global.length.value | default: product.metafields.global.Length.value %}
+{% assign pkg = product.metafields.custom.packaging.value | default: product.metafields.global.packaged.value | default: product.metafields.global.Packaged.value %}
+{% assign uom = product.metafields.custom.unit_of_measure.value | default: product.metafields.global.unit_of_measure.value %}
+{% assign coo = product.metafields.custom.origin.value | default: product.metafields.global.Country.value | default: product.metafields.global['Country-of-Origin'].value %}
+{% assign dur = product.metafields.custom.wyzenbeek.value | default: product.metafields.global['Wyzenbeek-#'].value %}
+{% assign mart = product.metafields.custom.martindale.value | default: product.metafields.global['Martindale-#'].value %}
+{% assign abr = product.metafields.custom.abrasion.value | default: product.metafields.specs.abrasion.value %}
+{% assign bk = product.metafields.custom.backing.value | default: product.metafields.specs.backing.value | default: product.metafields.global.Substrate.value | default: product.metafields.global.substrate.value %}
+{% assign brand = product.metafields.custom.brand.value | default: product.metafields.global.Brand.value %}
+{% assign wt = product.metafields.custom.product_weight.value | default: product.metafields.global.Weight.value %}
{% if w != blank or mat != blank or col != blank %}{% assign has_specs = true %}{% endif %}
@@ -54,7 +54,7 @@
{% if dur != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Wyzenbeek</span><span class="dw-spec-value">{{ dur }}</span></div>{% endif %}
{% if mart != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Martindale</span><span class="dw-spec-value">{{ mart }}</span></div>{% endif %}
{% if abr != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Abrasion</span><span class="dw-spec-value">{{ abr }}</span></div>{% endif %}
- {% assign ai_note = product.metafields.specs.ai_rooms_note %}
+ {% assign ai_note = product.metafields.specs.ai_rooms_note.value %}
{% if ai_note != blank %}
<div class="dw-spec-row" style="margin-top: 10px; padding-top: 10px; border-top: 1px solid #eee;">
<span class="dw-spec-label" style="color: #b45309; font-size: 13px;">AI Rooms</span>
diff --git a/shopify/theme-5.0-duplicate/snippets/product-description-meta.liquid b/shopify/theme-5.0-duplicate/snippets/product-description-meta.liquid
index 457d1661..191d647b 100644
--- a/shopify/theme-5.0-duplicate/snippets/product-description-meta.liquid
+++ b/shopify/theme-5.0-duplicate/snippets/product-description-meta.liquid
@@ -10,25 +10,25 @@
{% comment %} DW Specs — canonical namespace: custom.* — falls back to specs.* then global.* for legacy products {% endcomment %}
{% assign has_specs = false %}
-{% assign w = product.metafields.custom.width | default: product.metafields.specs.width | default: product.metafields.global.Width | default: product.metafields.global.width %}
-{% assign mat = product.metafields.custom.material | default: product.metafields.specs.composition | default: product.metafields.global.Content | default: product.metafields.global.Contents | default: product.metafields.global.Construction %}
-{% assign col = product.metafields.custom.collection_name | default: product.metafields.specs.collection | default: product.metafields.global.Collection %}
-{% assign rep = product.metafields.custom.pattern_repeat | default: product.metafields.global.repeat | default: product.metafields.global['Vert-Rpt'] %}
-{% assign fin = product.metafields.custom.finish | default: product.metafields.specs.finish | default: product.metafields.global.Finish | default: product.metafields.global.FINISH %}
-{% assign care = product.metafields.custom.care | default: product.metafields.specs.care | default: product.metafields.global.Cleaning | default: product.metafields.global.cleaning | default: product.metafields.global['Clean-Code'] | default: product.metafields.global['Cleaning-Code'] %}
-{% assign fire = product.metafields.custom.fire_rating | default: product.metafields.specs.fire_rating | default: product.metafields.global.fire_rating | default: product.metafields.global.FLAMMABILITY %}
-{% assign match = product.metafields.custom.match_type | default: product.metafields.specs.match_type | default: product.metafields.global.MATCH | default: product.metafields.global.Match %}
-{% assign app = product.metafields.custom.application | default: product.metafields.specs.application | default: product.metafields.global.application %}
-{% assign len = product.metafields.custom.length | default: product.metafields.global.length | default: product.metafields.global.Length %}
-{% assign pkg = product.metafields.custom.packaging | default: product.metafields.global.packaged | default: product.metafields.global.Packaged %}
-{% assign uom = product.metafields.custom.unit_of_measure | default: product.metafields.global.unit_of_measure %}
-{% assign coo = product.metafields.custom.origin | default: product.metafields.global.Country | default: product.metafields.global.country | default: product.metafields.global['Country-of-Origin'] %}
-{% assign dur = product.metafields.custom.wyzenbeek | default: product.metafields.global['Wyzenbeek-#'] %}
-{% assign mart = product.metafields.custom.martindale | default: product.metafields.global['Martindale-#'] %}
-{% assign abr = product.metafields.custom.abrasion | default: product.metafields.specs.abrasion %}
-{% assign bk = product.metafields.custom.backing | default: product.metafields.specs.backing | default: product.metafields.global.Substrate | default: product.metafields.global.substrate %}
-{% assign brand = product.metafields.custom.brand | default: product.metafields.global.Brand %}
-{% assign wt = product.metafields.custom.product_weight | default: product.metafields.global.Weight | default: product.metafields.global.weight %}
+{% assign w = product.metafields.custom.width.value | default: product.metafields.specs.width.value | default: product.metafields.global.Width.value | default: product.metafields.global.width.value %}
+{% assign mat = product.metafields.custom.material.value | default: product.metafields.specs.composition.value | default: product.metafields.global.Content.value | default: product.metafields.global.Contents.value | default: product.metafields.global.Construction.value %}
+{% assign col = product.metafields.custom.collection_name.value | default: product.metafields.specs.collection.value | default: product.metafields.global.Collection.value %}
+{% assign rep = product.metafields.custom.pattern_repeat.value | default: product.metafields.global.repeat.value | default: product.metafields.global['Vert-Rpt'].value %}
+{% assign fin = product.metafields.custom.finish.value | default: product.metafields.specs.finish.value | default: product.metafields.global.Finish.value | default: product.metafields.global.FINISH.value %}
+{% assign care = product.metafields.custom.care.value | default: product.metafields.specs.care.value | default: product.metafields.global.Cleaning.value | default: product.metafields.global.cleaning.value | default: product.metafields.global['Clean-Code'].value | default: product.metafields.global['Cleaning-Code'].value %}
+{% assign fire = product.metafields.custom.fire_rating.value | default: product.metafields.specs.fire_rating.value | default: product.metafields.global.fire_rating.value | default: product.metafields.global.FLAMMABILITY.value %}
+{% assign match = product.metafields.custom.match_type.value | default: product.metafields.specs.match_type.value | default: product.metafields.global.MATCH.value | default: product.metafields.global.Match.value %}
+{% assign app = product.metafields.custom.application.value | default: product.metafields.specs.application.value | default: product.metafields.global.application.value %}
+{% assign len = product.metafields.custom.length.value | default: product.metafields.global.length.value | default: product.metafields.global.Length.value %}
+{% assign pkg = product.metafields.custom.packaging.value | default: product.metafields.global.packaged.value | default: product.metafields.global.Packaged.value %}
+{% assign uom = product.metafields.custom.unit_of_measure.value | default: product.metafields.global.unit_of_measure.value %}
+{% assign coo = product.metafields.custom.origin.value | default: product.metafields.global.Country.value | default: product.metafields.global.country.value | default: product.metafields.global['Country-of-Origin'].value %}
+{% assign dur = product.metafields.custom.wyzenbeek.value | default: product.metafields.global['Wyzenbeek-#'].value %}
+{% assign mart = product.metafields.custom.martindale.value | default: product.metafields.global['Martindale-#'].value %}
+{% assign abr = product.metafields.custom.abrasion.value | default: product.metafields.specs.abrasion.value %}
+{% assign bk = product.metafields.custom.backing.value | default: product.metafields.specs.backing.value | default: product.metafields.global.Substrate.value | default: product.metafields.global.substrate.value %}
+{% assign brand = product.metafields.custom.brand.value | default: product.metafields.global.Brand.value %}
+{% assign wt = product.metafields.custom.product_weight.value | default: product.metafields.global.Weight.value | default: product.metafields.global.weight.value %}
{% if w != blank or mat != blank or col != blank %}{% assign has_specs = true %}{% endif %}
@@ -54,7 +54,7 @@
{% if dur != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Wyzenbeek</span><span class="dw-spec-value">{{ dur }}</span></div>{% endif %}
{% if mart != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Martindale</span><span class="dw-spec-value">{{ mart }}</span></div>{% endif %}
{% if abr != blank %}<div class="dw-spec-row"><span class="dw-spec-label">Abrasion</span><span class="dw-spec-value">{{ abr }}</span></div>{% endif %}
- {% assign ai_note = product.metafields.specs.ai_rooms_note %}
+ {% assign ai_note = product.metafields.specs.ai_rooms_note.value %}
{% if ai_note != blank %}
<div class="dw-spec-row" style="margin-top: 10px; padding-top: 10px; border-top: 1px solid #eee;">
<span class="dw-spec-label" style="color: #b45309; font-size: 13px;">AI Rooms</span>
← 6be93c15 China Seas mailer: pink hero v2 — TV removed (wallpaper patc
·
back to Designer Wallcoverings
·
Add drift-proof patcher to push the PDP spec .value fix to d e21ad3ee →