Blog

Kako smo napravili Mix ‘n Match popust za kesice semena uz Shopify Functions

Shopify Functions Mix 'n Match discount case study featuring a real cart with 20 seed packets and $14.80 saved.

Seeds ‘n Such ima jednostavnu ponudu: kupite dovoljno kesica semena i svaka kesica postaje jeftinija. Računa se bilo koja kombinacija. Deset različitih paradajza, po dve kesice od pet vrsta povrća ili po jedna kesica od dvadeset začinskih biljaka. To je taj „Mix ‘n Match“ deo.

Jedno pravilo čini sve težim nego što zvuči: seme u većim, bulk pakovanjima se nikad ne računa. Kilogram pasulja ne treba da podigne kupca u viši nivo popusta za kesice, niti da sam dobije popust za kesice.

Godinama je to pravilo bilo lako sprovesti, jer su kesice i bulk pakovanja bili odvojeni proizvodi. Kada smo sa agencijom Fencepost radili novi Seeds ‘n Such sajt, spojili smo ih u varijante jednog proizvoda. Kupovina je postala jednostavnija, a popust komplikovaniji. Ovaj tekst opisuje kako smo to rešili custom Shopify Function-om.

Zašto je spajanje kesica i bulk pakovanja promenilo problem

Pre redizajna, kesice i bulk pakovanja iste sorte bili su odvojeni proizvodi. Mix ‘n Match ponudu su pokrivala tri automatska popusta za kesice.

Takva struktura je bila nezgodna i za kupce i za tim. Kupac koji gleda jednu sortu video ju je raspoređenu na više proizvoda, a svaka sorta je značila više proizvoda za održavanje.

Kada su „Kesica“ i bulk pakovanja postali varijante istog proizvoda, to je rešeno. Ali pitanje ko ima pravo na popust preselilo se sa proizvoda na varijantu. „Ovaj proizvod ima popust“ više nije bilo tačno. Popust važi samo za neke njegove varijante.

Combined Listings ili jedan proizvod sa varijantama

Razmatrali smo dva načina da kesice i bulk pakovanja prikažemo zajedno.

Shopify Combined Listings grupišu odvojene proizvode pod jedan zajednički prikaz. Kesice i bulk pakovanja bi ostali odvojeni proizvodi, pa bi popusti na nivou proizvoda nastavili da rade. Zauzvrat bismo imali kompromise u prikazu i dostupnosti na sajtu, a tim bi i dalje održavao više proizvoda po sorti.

Jedan proizvod sa varijantama kesica i bulk bio je jednostavniji i za kupce i za tim, i to je standardni Shopify model. Cena tog izbora bio je popust: sada je morao da radi na nivou varijante.

Izabrali smo varijante i problem popusta rešili direktno.

Zašto ne ugrađeni popust ili aplikacija za količinske popuste

Ugrađeni automatski popusti u Shopify-u mogu da ciljaju određene varijante. Na katalogu ove veličine to bi značilo ručno biranje stotina varijanti kesica, usklađivanje tri popusta po nivoima i pamćenje da se doda svaka nova sorta. Takva ručna lista tiho zastari.

Aplikacije za količinske popuste koje smo pregledali nisu odgovarale pravilu ovog prodavca. Ili nisu mogle čisto da ciljaju prave varijante, ili je pravo na popust zavisilo od lista koje bi neko morao da održava kako se dodaju nove sorte. To ne znači da nijedna aplikacija ne ume da broji kroz više proizvoda. Mnoge umeju. Nijedna koju smo pogledali nije pokrivala baš ovu kombinaciju: pravo na popust na nivou varijante iz podataka kataloga, brojanje kroz celu korpu i izričita izuzeća.

Zašto custom aplikacija sa Shopify Functions

Shopify Functions omogućavaju custom aplikaciji da zameni deo Shopify logike za popuste. Kod se izvršava na Shopify infrastrukturi tokom korpe i checkout-a, a ne u temi, pa kupac ne može da ga zaobiđe izmenom stranice.

Seeds ‘n Such je na Shopify Plus planu, i to je ovde bitno. Custom aplikacije koje sadrže Functions mogu da se koriste samo na Plus prodavnicama. Javne aplikacije iz Shopify App Store-a mogu da koriste Functions na svakom planu. Prednosti i mane detaljnije opisujemo u tekstu Shopify Functions vs. Public Apps (na engleskom).

Aplikaciju smo napravili u našem Shopify Partner nalogu i instalirali je direktno na prodavnicu. Prodavac njome upravlja preko malog ekrana sa podešavanjima u Shopify admin-u.

Pravo na popust i podešavanja

Srž Function-a je jedno pitanje za svaku stavku u korpi: da li se ova varijanta računa?

Varijanta se računa samo kada važi oboje:

  • mix_match_eligible je true
  • package_type je packet

PakPlus i ProPak varijante su isključene, iako se prodaju uz kesice. Bulk pakovanja nikad nemaju package_type = packet, pa su isključena po definiciji.

Pravo na popust je izričit podatak na svakoj varijanti u katalogu, a ne nešto što Function pogađa iz naziva ili taga proizvoda. Nove sorte ulaze u ponudu čim su im varijante ispravno podešene. Niko ne menja nikakvu listu.

Custom Shopify aplikacija za popust sa uslovima za kesice i podesivim količinskim nivoima.
Podešavanja custom aplikacije: računaju se samo izričito označene varijante kesica; bulk, PakPlus i ProPak su isključeni.

Sređivanje tih podataka je bio poseban posao. Pre pisanja popusta, prošli smo kroz katalog od svih 1.363 proizvoda. Pomogla je SKU konvencija prodavnice: varijante kesica prate dosledan šablon i završavaju se na 00, pa je bilo lako uočiti varijante kojima nedostaju podaci ili su nedosledno označene. SKU šablon je bio alat za proveru. Function odlučuje na osnovu polja prikazanih iznad.

Brojanje kroz celu korpu, popust samo na kesice

Function sabira količine svih stavki u korpi koje imaju pravo na popust, kroz sve sorte. Taj zbir određuje nivo. Popust se zatim primenjuje samo na te stavke. Bulk stavka u istoj korpi ne povećava zbir i ne dobija popust.

Kesica sa pravom na popust u korpi Popust po kesici
Manje od 10 Nema Mix ‘n Match nivoa
10–15 $0,24 po kesici
16–19 $0,49 po kesici
20 ili više $0,74 po kesici

Nivoi se čuvaju kao podešavanja u aplikaciji, a nisu upisani u kod, pa prodavac može da menja pragove i iznose bez novog deploy-a.

U grubim crtama, logika izgleda ovako:

eligible = cart lines where
  variant.mix_match_eligible == true
  and variant.package_type == "packet"
  and variant is not PakPlus or ProPak

count = sum of quantity across eligible

tier = highest configured tier where count >= tier.min
if no tier: return no operations

return operations:
  productDiscountsAdd
    candidates: one per eligible line
      target: that cart line
      value: fixedAmount(tier.amount, appliesToEachItem = true)

Ilustrativni pseudokod, a ne produkcijski Shopify Function niti API payload spreman za kopiranje. Prati oblik trenutnog Discount Function API-ja, gde target cart.lines.discounts.generate.run vraća operations sa productDiscountsAdd. Stariji primeri koji vraćaju discounts sa discountApplicationStrategy koriste prethodni API i ne treba ih kopirati u nove projekte.

Kako to izgleda u korpi

Ovo je prava korpa sa 20 kesica koje imaju pravo na popust. Korpa prikazuje koliko kupcu fali do sledećeg nivoa, a kada stigne do 20, svaka kesica sa pravom na popust jeftinija je za $0,74. To je 20 × $0,74 = $14,80 uštede.

Seeds 'n Such korpa sa 20 kesica semena i $14,80 Mix 'n Match uštede.
Prava korpa: 20 kesica otključava nivo od $0,74 po kesici, uz uštedu od $14,80.

U ovoj korpi su samo kesice, pa ona pokazuje logiku nivoa, a ne izuzimanje bulk pakovanja. Izuzimanje bulk-a se dokazuje test korpama, a ne jednim screenshot-om.

Šta testirati pre uključivanja

Ovakav popust se najvećim delom sastoji od graničnih slučajeva. Plan testiranja koji bismo koristili za svaki Function ovog tipa pokriva:

  • Granice nivoa: 9, 10, 15, 16, 19 i 20 kesica. Tu se kriju greške za jedan.
  • Mešane korpe: kesice i bulk iste sorte zajedno. Bulk stavka ne sme da promeni zbir niti da dobije popust.
  • Isključena pakovanja: PakPlus i ProPak stavke, same i pomešane sa kesicama.
  • Podaci koji nedostaju: varijanta kesice bez polja za pravo na popust ne sme slučajno da dobije popust.
  • Preklapanje: stari automatski popusti za kesice moraju da se isključe pri prelasku, inače kupci dobijaju oba.

Korišćenje posle lansiranja

U Shopify Analytics-u za period od 11. oktobra do 10. novembra 2026, popust Seeds Mix ‘n Match se pojavljuje na 328 porudžbina sa popustom, sa ukupnom prodajom od približno $25,2K na tim porudžbinama.

Shopify Analytics prikazuje 328 porudžbina sa popustom Seeds Mix 'n Match, od 11. oktobra do 10. novembra 2026.
Shopify Analytics prikazuje približno $25,2K ukupne prodaje povezane sa popustom Seeds Mix 'n Match, od 11. oktobra do 10. novembra 2026.

Ono što brojke pokazuju jeste da se ponuda redovno koristi i posle spajanja varijanti, i da se popust primenjuje na pravim porudžbinama, ne samo u test korpama.

Kada se isplati custom Function

Većini prodavnica ne treba. Ako ugrađeni popust ili dobro održavana aplikacija pokriva vaše pravilo, koristite to.

Custom Function počinje da ima smisla kada:

  • Pravo na popust zavisi od podataka u katalogu, na primer polja na varijanti, a ne od liste proizvoda.
  • Pravilo mora da broji kroz mnogo proizvoda, a popust da daje samo nekim stavkama.
  • Prodavnica je na Shopify Plus planu, ili je logika dovoljno opšta da opravda javnu aplikaciju.
  • Katalog se menja dovoljno često da ručne liste zastare.

Seeds ‘n Such je ispunio sva četiri uslova. Za ceo redizajn, uključujući navigaciju po kulturi, cilju i klimatskoj zoni, pogledajte Seeds ‘n Such studiju slučaja. Projekat je urađen u partnerstvu sa agencijom Fencepost.

Imate pravilo za popust koje vaša trenutna postavka ne može da izrazi? Javite nam. Reći ćemo vam da li je potreban custom razvoj ili podešavanje koje još niste probali. Više o našem radu na razvoju online prodavnica.