Använd etiketten i egna teman och headless-butiker
Läs OmniBuzz-etiketten från ett variantmetafält i din egen Liquid-kod eller i Storefront API och använd samma visningsregel som appblocket.
Appblocket räcker för de flesta teman. Om ditt tema inte stöder appblock, eller om du bygger en headless-butik, kan du läsa den färdiga etiketten själv. OmniBuzz skriver den till ett variantmetafält. Både Liquid-temat och Storefront API kan läsa det.
Var datan finns
| Egenskap | Värde |
|---|---|
| Namnrymd | omnibuzz |
| Nyckel | label |
| Typ | json |
| Ägare | Produktvariant |
| Storefront-åtkomst | Offentlig läsning |
| Definitionens namn | OmniBuzz label |
OmniBuzz skapar definitionen åt dig. Värdet finns så snart varianten har OmniBuzz-data. m kan vara tomt ({}); visa då ingenting.
Om du använder temablocket ändras ingenting. Blocket Omnibus-pris fortsätter använda sin egen data ($app:omnibus). Du behöver bara den här sidan om du skriver egen kod.
Värdets format
{
"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 %"
}
}
}
}
Exemplet visar tre språk för att hållas kort. Det riktiga värdet har alla tio i t och i b. Butikens valuta i exemplet är EUR, så den andra marknaden är omräknad och har fx.
| Fält | Betydelse |
|---|---|
v | Formatversion. För närvarande 1. |
u | När värdet skrevs (ISO-tid). |
w | Fönstrets längd i dagar. |
m | Resultat per marknad. Nyckeln är marknadens numeriska ID. Bara marknader med en etikett att visa finns med. Det kan vara tomt. |
c | Postens valuta. |
p | Pris vid kontrollen, i ören (samma enhet som Liquid-priser, även för valutor utan decimaler). |
r | Det tidigare priset, i ören. |
pct | Sänkning från det tidigare priset, i procent, avrundad nedåt. |
fx | Växelkurstolerans i baspunkter (200 = 2 %). Finns bara när c inte är butikens valuta. |
t | Etikettext per språk. Alla tio språk. |
b | Rabattmärkets text per språk. Finns bara när pct är över 0. |
Visningsregeln
Kontrollera alltid den sparade posten mot den aktuella sidan. Visa etiketten bara när allt detta stämmer:
mhar en post för köparens marknads-ID.cär lika med köparens valuta.- Varianten har ett jämförpris som är högre än priset.
rär över 0.- Det aktuella priset i ören är lika med
p. För en post medfxräcker det också attabs(price - p) * 10000 <= p * fx.
Välj text i den här ordningen: köparens språk (till exempel de), sedan baspråket (pt och pt-BR använder pt-PT), sedan en. Visa rabattmärket bara när det aktuella priset är exakt p. Behandla all text som ren text: använd | escape i Liquid och textContent i JavaScript, aldrig innerHTML.
Om en kontroll misslyckas, visa ingenting. Visa inte en gammal etikett bredvid ett ändrat pris.
Liquid-exempel
Spara detta som snippets/omnibuzz-label.liquid och rendera det på produktsidan:
{% 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 -%}
Snippeten läser det aktuella priset från varianten. När köparen väljer en annan variant måste ditt tema rendera snippeten igen eller köra samma kontroller i ett skript.
Exempel med Storefront API
Utan @inContext returnerar API:t huvudmarknadens priser. Skicka alltid med köparens land och språk:
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 är en JSON-sträng. Tolka den och använd sedan visningsregeln:
- Räkna om
amounttill ören:Math.round(Number(amount) * 100). Gör det för alla valutor. - Marknads-ID:t är ett globalt ID som
gid://shopify/Market/123456789. Använd talet i slutet som nyckel im. localization.marketär föråldrat från Storefront API 2026-10 men fungerar fortfarande. Utan marknads-ID visar du ingenting.
Bra att veta
- Värdena uppdateras varje natt, och igen när du ändrar etikettexter eller växelkurstoleransen på sidan Etiketter.
- Appen formaterar beloppen i texten själv. Formatet kan skilja sig något från butikens valutaformat.
- En marknad med etiketter avstängda, eller en variant utan resultat, har ingen post. Visa i så fall ingenting.
När du avinstallerar appen
Shopify tar bara bort data som tillhör appen själv. Definitionen omnibuzz och dess värden ligger kvar i din butik efter avinstallationen. Appen kan inte längre städa upp dem. För att ta bort dem, öppna Inställningar > Anpassade data > Produktvarianter i din Shopify-admin och ta bort definitionen OmniBuzz label. När du tar bort den försvinner också dess värden.
Ta bort din kod också. Efter avinstallationen uppdateras datan inte längre, och en gammal etikett kan hamna bredvid ett ändrat pris. Ta bort din snippet eller fråga när du avinstallerar.