Project portfolio Browse selected work

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

Developer modules / Content, brand and partnerships

Content, brand and partnerships

Connect real articles, business identity, locations and partnership information.

Affiliates, distributors and subscriptions

Separate partnership applications from newsletter requests. State audience, region and review steps for applications and delivery conditions for subscriptions, using actual form outcomes.

Data and dependencies

  • Use a contact form with an application type for partnerships.
  • Use a customer form for subscriptions and real benefit terms.

Interaction logic

  • Acceptance is not partnership approval.
  • Keep the page usable after dismissing a subscription overlay.
Example code · snippets/ww-partner-request.liquid
Liquid · WESWOO
{% assign partner_form_id = 'Partner-' | append: section.id %}
{% form 'contact', id: partner_form_id %}
  <label for="Partner-Type-{{ section.id }}">Request type</label>
  <select id="Partner-Type-{{ section.id }}" name="contact[Request type]">
    <option value="Distributor">Distributor application</option>
    <option value="Affiliate">Affiliate inquiry</option>
  </select>
  <label for="Partner-Email-{{ section.id }}">Business email</label>
  <input id="Partner-Email-{{ section.id }}" type="email" name="contact[email]" required>
  <button type="submit">Send application</button>
  {% if form.posted_successfully? %}<p role="status">Application submitted for review.</p>{% endif %}
  <div role="alert">{{ form.errors | default_errors }}</div>
{% endform %}

Example code · snippets/ww-newsletter.liquid
Liquid · WESWOO
{% assign newsletter_id = 'Newsletter-' | append: section.id %}
{% form 'customer', id: newsletter_id %}
  <input type="hidden" name="contact[tags]" value="newsletter">
  <label for="Newsletter-Email-{{ section.id }}">Email for product news</label>
  <input id="Newsletter-Email-{{ section.id }}" type="email" name="contact[email]" autocomplete="email" required>
  <p>Subscribe to product news. Read the privacy policy before submitting.</p>
  {% if shop.privacy_policy != blank %}<a href="{{ shop.privacy_policy.url | escape }}">Privacy policy</a>{% endif %}
  <button type="submit">Subscribe</button>
  {% if form.posted_successfully? %}<p role="status">Your request was submitted.</p>{% endif %}
  <div role="alert">{{ form.errors | default_errors }}</div>
{% endform %}

Acceptance checks

  • Check routing and ownership for both application types.
  • Test email, error feedback and the privacy link.

The fragments do not configure commissions, pricing or approval. Connect consent and future messages to the actual account and applicable requirements.

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