Project portfolio Browse selected work

Shopify Plus Upgrade Monthly Fee Reduction + Up to $4800 Development Fee Credit - Exclusive WesWoo Offer

Developer modules / Product detail and combined purchases

Product detail and combined purchases

Synchronize model and variant facts before media, accessories and specifications.

Specification tabs, packaging and policies

Organize specifications, packaging, compatibility and policies into clear regions. Start with native disclosure; if enhanced into tabs, retain server-rendered content and shared fact and policy versions.

Data and dependencies

  • Use the ww-specifications dependency.
  • custom.compatibility is single-line text; link to current policies.

Interaction logic

  • Do not invent copy for missing records.
  • Keep headings and sources usable after expansion.
Example code · snippets/ww-product-details.liquid
Liquid · WESWOO
<details>
  <summary>Specifications and compatibility</summary>
  {% render 'ww-specifications', product: product %}
  {% assign compatibility = product.metafields.custom.compatibility.value %}
  {% if compatibility != blank %}<p>{{ compatibility | escape }}</p>{% endif %}
</details>
<details>
  <summary>Shipping and returns</summary>
  {% if shop.shipping_policy != blank %}<a href="{{ shop.shipping_policy.url | escape }}">Shipping policy</a>{% endif %}
  {% if shop.refund_policy != blank %}<a href="{{ shop.refund_policy.url | escape }}">Returns policy</a>{% endif %}
</details>

Example code · snippets/ww-specifications.liquid
Liquid · WESWOO
{% assign rows = product.metafields.custom.specification_rows.value %}
{% if rows != blank %}
  <table>
    <caption>{{ product.title | escape }} — specifications</caption>
    <tbody>
      {% for row in rows %}
        {% if row.label.value != blank and row.spec_value.value != blank %}
          <tr>
            <th scope="row">{{ row.label.value | escape }}</th>
            <td>{{ row.spec_value.value | escape }} {{ row.unit.value | escape }}</td>
          </tr>
        {% endif %}
      {% endfor %}
    </tbody>
  </table>
{% endif %}

Acceptance checks

  • Read facts and policies with scripts disabled.
  • Check phone tables, long values and policy destinations.

A policy link does not establish applicability in every market. Use the policy module for regional conditions.

Read it, integrate it, verify it

  1. Choose a module and confirm the data contract.
  2. Connect the fragment to the current theme or framework.
  3. Check real variants, markets and recovery states.

Examples target Shopify Online Store 2.0 themes. Headless has separate data and version boundaries. Integrate fragments with actual fields, theme components and locale files.

Architecture references

Original educational examples with Shopify documentation and pinned upstream references. Follow the applicable license when adopting repository code.

Shopify/dawn · Licensecommit 3e9ee2281dc4 · Shopify-integration theme license; architecture reference without copying the implementation.
Shopify/hydrogen · Licensecommit 9e358a2462ba · MIT; retain copyright and license when using substantial code.

References checked 2026-11-12