Documentatiemenu

Het label gebruiken in eigen thema's en headless storefronts

Lees het OmniBuzz-label uit een variantmetaveld in je eigen Liquid-code of in de Storefront API en pas dezelfde weergaveregel toe als het app-blok.

Het app-blok dekt de meeste thema’s. Ondersteunt je thema geen app-blokken, of bouw je een headless storefront, dan kun je het kant-en-klare label zelf lezen. OmniBuzz schrijft het naar een variantmetaveld. Zowel het Liquid-thema als de Storefront API kan het lezen.

Waar de gegevens staan

EigenschapWaarde
Namespaceomnibuzz
Sleutellabel
Typejson
EigenaarProductvariant
Storefront-toegangOpenbaar leesbaar
Naam van de definitieOmniBuzz label

OmniBuzz maakt de definitie voor je aan. De waarde bestaat zodra de variant OmniBuzz-gegevens heeft. m kan leeg zijn ({}); toon dan niets.

Gebruik je het themablok? Dan verandert er niets. Het blok Omnibusprijs blijft zijn eigen gegevens gebruiken ($app:omnibus). Deze pagina heb je alleen nodig als je zelf code schrijft.

Het waardeformaat

{
  "v": 1,
  "u": "2026-11-05T02:10:00Z",
  "w": 30,
  "m": {
    "123456789": {
      "c": "EUR",
      "p": 10000,
      "r": 12000,
      "pct": 16,
      "t": {
        "en": "Lowest price in the last 30 days: €120.00",
        "de": "Niedrigster Preis der letzten 30 Tage: 120,00 €",
        "fr": "Prix le plus bas des 30 derniers jours : 120,00 €"
      },
      "b": {
        "en": "-16%",
        "de": "-16 %",
        "fr": "-16 %"
      }
    },
    "987654321": {
      "c": "SEK",
      "p": 114500,
      "r": 136000,
      "pct": 15,
      "fx": 200,
      "t": {
        "en": "Lowest price in the last 30 days: SEK 1,360.00",
        "de": "Niedrigster Preis der letzten 30 Tage: 1.360,00 SEK",
        "fr": "Prix le plus bas des 30 derniers jours : 1 360,00 SEK"
      },
      "b": {
        "en": "-15%",
        "de": "-15 %",
        "fr": "-15 %"
      }
    }
  }
}

Het voorbeeld toont drie talen om het kort te houden. De echte waarde bevat alle tien in t en in b. De winkelvaluta in het voorbeeld is EUR, dus de tweede markt is omgerekend en heeft fx.

VeldBetekenis
vFormaatversie. Nu 1.
uWanneer de waarde is geschreven (ISO-tijd).
wLengte van het venster in dagen.
mResultaten per markt. De sleutel is de numerieke markt-ID. Alleen markten met een label om te tonen komen erin voor. Het kan leeg zijn.
cValuta van het item.
pPrijs op het moment van controle, in centen (dezelfde eenheid als Liquid-prijzen, ook bij valuta’s zonder decimalen).
rDe eerdere prijs, in centen.
pctVerlaging ten opzichte van de eerdere prijs, in procenten, naar beneden afgerond.
fxWisselkoerstolerantie in basispunten (200 = 2%). Alleen aanwezig als c niet de winkelvaluta is.
tLabeltekst per taal. Alle tien de talen.
bBadgetekst per taal. Alleen aanwezig als pct boven 0 ligt.

De weergaveregel

Controleer het opgeslagen item altijd tegen de actuele pagina. Toon het label alleen als dit allemaal klopt:

  1. m heeft een item voor de markt-ID van de koper.
  2. c is gelijk aan de valuta van de koper.
  3. De vergelijkingsprijs van de variant ligt boven de prijs.
  4. r is groter dan 0.
  5. De actuele prijs in centen is gelijk aan p. Bij een item met fx geldt ook abs(price - p) * 10000 <= p * fx.

Kies de tekst in deze volgorde: de taal van de koper (bijvoorbeeld de), dan de basistaal (pt en pt-BR gebruiken pt-PT), dan en. Toon de badge alleen als de actuele prijs precies gelijk is aan p. Behandel alle teksten als platte tekst: gebruik in Liquid | escape, in JavaScript textContent, nooit innerHTML.

Mislukt een controle, toon dan niets. Toon geen oud label naast een gewijzigde prijs.

Liquid-voorbeeld

Sla dit op als snippets/omnibuzz-label.liquid en render het op de productpagina:

{% doc %}
  @param {variant} variant - The selected variant
  @example
  {% render 'omnibuzz-label', variant: product.selected_or_first_available_variant %}
{% enddoc %}
{%- liquid
  assign label = variant.metafields.omnibuzz.label.value
  assign market_id = localization.market.id | append: ''
  assign entry = label.m[market_id]
  assign price = variant.price
  assign show = false
  assign exact = false

  if entry and entry.c == cart.currency.iso_code and variant.compare_at_price > price and entry.r > 0
    if price == entry.p
      assign show = true
      assign exact = true
    elsif entry.fx != blank
      assign drift = price | minus: entry.p | abs | times: 10000
      assign allowed = entry.p | times: entry.fx
      if drift <= allowed
        assign show = true
      endif
    endif
  endif

  if show
    assign lang = request.locale.iso_code
    assign base = lang | split: '-' | first
    if base == 'pt'
      assign base = 'pt-PT'
    endif
    assign text = entry.t[lang] | default: entry.t[base] | default: entry.t.en
    assign badge = entry.b[lang] | default: entry.b[base] | default: entry.b.en
  endif
-%}
{%- if show and text != blank -%}
  <p class="omnibuzz-label">{{ text | escape }}</p>
  {%- if exact and badge != blank -%}
    <span class="omnibuzz-badge">{{ badge | escape }}</span>
  {%- endif -%}
{%- endif -%}

De snippet leest de actuele prijs van de variant. Kiest de koper een andere variant, dan moet je thema de snippet opnieuw renderen of dezelfde controles in een script uitvoeren.

Voorbeeld met de Storefront API

Zonder @inContext geeft de API de prijzen van de hoofdmarkt. Geef altijd het land en de taal van de koper mee:

query OmniBuzzLabel($handle: String!, $country: CountryCode!, $language: LanguageCode!)
@inContext(country: $country, language: $language) {
  localization {
    market {
      id
    }
  }
  product(handle: $handle) {
    variants(first: 50) {
      nodes {
        id
        price {
          amount
          currencyCode
        }
        compareAtPrice {
          amount
          currencyCode
        }
        metafield(namespace: "omnibuzz", key: "label") {
          value
        }
      }
    }
  }
}

value is een JSON-string. Parse die en pas dan de weergaveregel toe:

  • Reken amount om naar centen: Math.round(Number(amount) * 100). Doe dit voor elke valuta.
  • De markt-ID is een globale ID zoals gid://shopify/Market/123456789. Gebruik het getal aan het eind als sleutel in m.
  • localization.market is verouderd vanaf Storefront API 2026-10, maar werkt nog. Zonder markt-ID toon je niets.

Goed om te weten

  • De waarden worden elke nacht bijgewerkt, en opnieuw als je op de pagina Labels labelteksten of de wisselkoerstolerantie wijzigt.
  • De app formatteert de bedragen in de tekst zelf. Dat kan een beetje afwijken van het geldformaat van je winkel.
  • Een markt met labels uit, of een variant zonder resultaat, heeft geen item. Toon dan niets.

Als je de app verwijdert

Shopify verwijdert alleen gegevens die van de app zelf zijn. De definitie omnibuzz en de waarden blijven na het verwijderen in je winkel staan. De app kan ze niet meer opruimen. Om ze te verwijderen open je Instellingen > Aangepaste gegevens > Productvarianten in je Shopify-beheer en verwijder je de definitie OmniBuzz label. Daarmee verdwijnen ook de waarden.

Verwijder ook je code. Na het verwijderen worden de gegevens niet meer bijgewerkt en kan een oud label naast een gewijzigde prijs staan. Verwijder je snippet of query bij het verwijderen van de app.