Ako vodite online shop u Hrvatskoj ili bilo gdje u EU, sigurno već znate za direktivu Omnibus i obvezu prikazivanja najniže cijene u zadnjih 30 dana. U savršenom trenutku je kolega Igor Kovačić na Githubu objavio plugin WooCommerce Lowest Price.
Verzija 1.x radila je svoj posao, ali imala je podosta ograničenja. Mogla je pratiti cijene i prikazati ih na stranici proizvoda, ali nije prilagodbe izgleda, ni grafa povijesti cijena, ni jednostavnog uređivanje podataka. Sve je bilo “hardcoded” i zahtijevalo je zapise u wp-config.php fajlu za bilo kakvo podešavanje.
Ako ste ikad pokušali korektno riješiti Omnibus direktivu u WooCommerceu, velika je šansa da ste:
– ručno upisivali “najnižu cijenu”
– koristili plugin koji nema “poštene” postavke
– ili ste jednostavno digli ruke i nadali se da inspekcija neće doći
WooCommerce Lowest Price 2.0 nastao je upravo iz tog razloga – kao kompletan rewrite starog rješenja koje je radilo, ali više nije bilo dovoljno.
Što je bilo problem u starom pluginu?
Prije nego pređemo na novo, vrijedi spomenuti što nas je mučilo sa starom verzijom:
- Nema sučelja za podešavanja – Sve postavke bile su zakopane u config fajlovima
- Ograničene opcije dizajna
- Teško uređivanje povijesti – Ako ste trebali popraviti grešku u povijesti cijena, morali ste ići direktno u bazu
- Nema vizualizacije – Nigdje niste mogli vidjeti kako se cijena mijenjala kroz vrijeme
- Ručno brisanje podataka – Pri deinstalaciji ste morali ručno čistiti bazu
Sve to je radilo plugin korisnim, ali frustrirajućim za svakodnevnu upotrebu.
Što donosi verzija 2.0?
Stranica postavki

Prva i najočitija promjena – konačno imate normalno sučelje za sve postavke. Više ne kopate po kodu, sve je lijepo posloženo na jednom mjestu:
- Izaberite kako želite prikazati informaciju (tekst ispod cijene proizvoda ili alternativni prikaz u product meta sekciji)
- Izaberite želite li prikazivati informaciju o najnižoj cijeni u loop-u (stranica trgovine/kategorija)
- Prilagodite tekst (“Najniža cijena u zadnjih 30 dana”)
- Odaberite boje i veličine fonta odvojeno za stranice proizvoda i za shop/kategorije
- Odlučite hoćete li prikazati graf povijesti cijena i gdje
- Podesite izgled grafa
Prilagodba izgleda
Svaki shop je drugačiji. Neke teme imaju tamnije pozadine, druge svjetlije. Neki vole sitna slova, drugi krupnija. Sada možete sve to podesiti bez diranja u CSS.
Osim toga, imate odvojene postavke za shop stranice i pojedinačne proizvode. Na listi proizvoda možda želite manja slova da ne zauzimaju previše mjesta, a na stranici proizvoda veća za jasnoću.
Povijest cijena s pravim uređivanjem

Ovo je bila jedna od najvećih frustracija sa starim pluginom. Ako ste greškom unijeli pogrešnu cijenu ili htjeli nešto popraviti, morali ste direktno u bazu podataka.
Sada u admin sučelju, na stranici uređivanja proizvoda, imate preglednu tablicu sa svim povijesnim cijenama. Možete:
- Direktno uređivati cijene – Kliknete “Edit Prices”, unesete ispravnu vrijednost, spremite
- Brisati unose – Svaki red ima “Delete” link ako treba nešto maknuti
- Vidjeti točne datume – Kada je cijena počela važiti i kada je prestala
Sve je responzivno i radi na mobitelu, što je posebno korisno kada brzinski trebate nešto ažurirati.
Graf povijesti cijena
Ovo je najzanimljivija nova funkcija. Plugin sada može prikazati interaktivan graf koji pokazuje kako se cijena proizvoda mijenjala u zadnjih 30 dana.
Možete izabrati:
- Tip grafa – Line chart ili bar chart
- Boju grafa – Da paše uz vašu temu
- Gdje prikazati graf – U zasebnom tabu na stranici proizvoda, modal koji se otvara klikom na link (ikonu) ispod cijene, ili modal link u product meta sekciji
- Dark mode – Za teme sa tamnom pozadinom
- Tekst opisa – Prilagodite objašnjenje iznad grafa
Graf je u potpunosti responzivan i koristi Chart.js biblioteku, što znači da je brz i radi glatko čak i na starijim mobitelima.
Posebna fora za varijabilne proizvode: Kada kupac bira između različitih varijanti (npr. veličina, boja), graf se automatski ažurira i prikazuje povijest za odabranu varijantu. Sve se dešava bez refresha stranice preko AJAX-a.
Kontrola po proizvodu: Ne želite prikazati graf za baš sve proizvode? Nema problema. Na svakom proizvodu imate checkbox kojim možete isključiti prikaz grafa samo za taj proizvod, bez utjecaja na ostale.
Alati za održavanje i popravak podataka

Ponekad se dogode nekonzistentnosti u podacima. Možda ste masovno uvozili proizvode, radili nadogradnju, ili ste ručno brisali neke stvari u bazi. U takvim situacijama, graf može prikazati čudne podatke, ili najniža cijena može biti netočna.
Plugin sada ima ugrađene alate za dijagnostiku i popravak:
Skeniranje problema
Prvi korak je uvijek skeniranje. Plugin će pregledati cijelu tablicu povijesti cijena i javiti vam točno što nije u redu:
- Obrisani proizvodi koji još imaju aktivne zapise u povijesti
- Nevažeći intervali (završni datum prije početnog)
- Budući datumi (što bi značilo grešku u sustavu)
- NULL vrijednosti koje bi trebale biti nešto drugo
- Proizvodi sa više aktivnih zapisa umjesto jednog
Automatski popravci
Nakon što vidite rezultate skeniranja, imate nekoliko opcija:
- Popravi probleme konzistentnosti – Zatvara zapise za nepostojeće proizvode, ispravlja nevažeće datume, normalizira NULL vrijednosti
- Popravi aktivne zapise – Osigurava da svaki proizvod ima samo jedan aktivan zapis cijene (zadržava najnoviji, ostale označava kao završene)
- Ponovno izgradi meta podatke – Preračunava
_lowest_price_30_daysza sve proizvode ili samo one zahvaćene popravkom
Posebno je koristan scenarij kada radite nadogradnju sa verzije 1.x na 2.0. Stari podaci možda nisu bili savršeno struktuirani, pa alat može očistiti sve nekonzistentnosti i osigurati da sve radi kako treba.
Drugi tipičan slučaj je nakon masovnog uvoza proizvoda preko CSV-a ili nekog drugog plugina. Ponekad takvi alati ne ažuriraju sve potrebne podatke kako treba, pa ovaj alat popravlja stvari.
Lokalizacija
Verzija 2.0 uklanja sve hardcoded HR stringove iz ranijih verzija i oslanja se isključivo na standardni WordPress i18n mehanizam, što otvara prostor za jednostavnu lokalizaciju i širu primjenu.
Ažuriranja (novo)
Kako bi plugin bio održiv u realnim WooCommerce okruženjima, verzija 2.0 uvodi i standardni update mehanizam putem MX update servera
To znači da se sva buduća ažuriranja isporučuju direktno kroz WordPress admin, bez ručnih instalacija i bez oslanjanja na GitHub releaseove za produkcijske shopove. Na ovaj način moguće je brže isporučivati bugfixeve i sigurnosne nadogradnje, uz jasnu kontrolu verzija.
Tehnički detalji (za developere)
Plugin koristi vlastitu bazu tablica (wp_price_history) za praćenje cijena umjesto post meta podataka, što značajno ubrzava upite i smanjuje opterećenje na velikim shopovima.
Dodali smo indeks na product_id kolonu za brže pretraživanje, a graf na frontendu koristi Chart.js sa date-fns adapterom za precizno formatiranje datuma prema lokalnim postavkama WordPressa.
JavaScript koristi jQuery event delegaciju, što poboljšava kompatibilnost u scenarijima s dinamičkim učitavanjem elemenata (uključujući AJAX i neke page builder kontekste).
Čišćenje pri deinstalaciji

Nova verzija nudi dvije opcije za uklanjanje plugina:
- Standardno čišćenje – Briše samo postavke plugina i
price_historytablicu - Potpuno čišćenje – Dodatno briše sve post meta podatke vezane za plugin
Druga opcija može trajati malo duže na velikim shopovima (radi u batch-evima da optimizira performanse), ali osigurava potpuno čistu bazu. Preporučujemo backup prije potpunog čišćenja.
Migracija (1.x → 2.0)
PRIJE NADOGRADNJE:
- Napravite backup baze podataka
- Testirajte na staging okolini
- Provjerite da je vaša PHP verzija je 7.4+
- Provjerite da koristite WooCommerce 8.0+
NAKON NADOGRADNJE:
- Pokrenite Scan & Repair alat
- Podesite nove opcije u Settings > Products > Lowest Price
- Regenerirajte CSS (automatski nakon spremanja postavki)
- Testirajte frontend prikaz na nekoliko proizvoda
- Provjerite graf na proizvodu koji je bio na akciji
WooCommerce plugin za prikaz najniže cijene
Možete skinuti besplatan plugin koji omogućava funkcionalnost opisanu u članku. Downloadajte ga, instalirajte ga kao svaki drugi plugin (upload zip datoteke) ili FTP klijentom povučete raspakirani folder plugina u wp-content/plugins folder i aktivirajte u adminu.
Što slijedi?
U planu imamo:
Shortcode za fleksibilniji prikaz najniže cijene bilo gdje na straniciDodano u v2.1.0- Izvoz podataka – Mogućnost preuzimanja povijesti cijena za proizvode u CSV formatu, pojedinačno ili bulk
- Proširenje vremenskog perioda – Opcija za praćenje cijena u periodu dužem od 30 dana
Nonce i/ili rate limiting za frontend graph requestove – opcionalno u postavkamaDodano u v2.1.0- Lowest price kolona – kolonu u listi proizvoda koja prikazuje najnižu cijenu (30 dana), sortable.
- Novo “Reason for price change” polje – opcionalno spremati razlog promjene cijene uz svaki zapis u history tablici (korisno za audit/inspekciju).
Changelog
Sve izmjene, bugfixeve i nove funkcionalnosti pratit ćemo ovdje. Provjeravajte redovito za nove verzije i poboljšanja.
= 2.1.0 =
FIXED:
– Modal selectors aligned between PHP output and JS for reliable open/close behavior.
– AJAX endpoints now return tax-aware display prices (graphs + lowest price label).
– Mobile overflow and duplicate border issue in Price History admin table.
– Removed error suppression (@file_put_contents) in regenerate_css(); added debug logging on write failure.
– Price graph AJAX caching now correctly uses variation_id (when provided) for cache keys and data lookup, preventing stale graph data after variation price changes.
– Variation lowest price AJAX now returns fully formatted label + price HTML for consistent frontend replacement.
IMPROVED:
– Price tracking now runs on woocommerce_after_product_object_save to avoid stale values during admin saves.
– Graph date labels now use Intl.DateTimeFormat with WP locale normalization (e.g. hr_HR → hr-HR) instead of hardcoded month arrays.
– Chart initialization prevents duplicate Chart.js instances and safely destroys/rebuilds charts when re-rendering.
– Dark mode styling for graph containers/tooltips.
– Price History admin meta box is now fully responsive (stacked card layout on mobile).
– Admin CSS spacing and box-sizing adjustments for consistent rendering in WP mobile view.
– Frontend variation AJAX now optionally sends nonce when available (BC-safe implementation).
– Standardized AJAX response handling for graph data (data_points with backward-compatible fallback).
– Uninstall cleanup now removes all v2 frontend AJAX-related options.
– Shortcode output for lowest price is now fully builder-proof and independent of WooCommerce price HTML filters.
– Placeholder and error messages for variation lowest price are now localized via wp_localize_script.
ADDED:
– Lowest price shortcode: [wplp_lowest_price] for manual placement in builders or custom templates.
– Frontend variation listener for lowest price (updates dynamically when variation is selected).
– AJAX endpoint (get_lowest_price) for variation-based lowest price retrieval.
– Collapsible shortcode help section inside plugin settings (independent of graph feature).
– Price history graph shortcode (renders the graph via shortcode output).
– Frontend AJAX endpoint for graph data (used for variation changes / dynamic refresh).
– Lazy-loading for graphs via IntersectionObserver with graceful fallback.
CHANGED:
– Shortcode graph output ignores per-product “Disable graph” flag so it can always render when explicitly used.
– Admin meta box markup updated with data-label attributes to support mobile stacked layout.
– Lowest price display logic simplified: when product is on sale, computed lowest price in last 30 days is always shown (no conditional hiding based on equality).
ACCESSIBILITY:
– Graph canvas includes role=”img”, aria-label and fallback text for better accessibility.
I18N:
– Added translatable strings for new [wplp_lowest_price] shortcode.
– Moved variation placeholder and error messages from JS to localized PHP strings.
– Ensured AJAX response label and shortcode help UI strings use proper escaping and text domain.
– Updated POT coverage for new shortcode and variation listener strings.
= 2.0.2 =
FIXED: Lowest price display now respects WooCommerce tax display settings (wc_get_price_to_display) to prevent mixed net/gross values.
FIXED: Price history graph now respects WooCommerce tax display settings (wc_get_price_to_display) for chart points and tooltips.
= 2.0.1 =
FIXED: Admin issue where product prices could not be saved after update. Improves stability of the price history meta box. No database or frontend changes.
= 2.0.1 =
Redizajn i nova arhitektura
- Potpuno prepisan plugin s modernom PHP i objektno-orijentiranom arhitekturom
- Modularna struktura koda s jasnom podjelom odgovornosti
- Poboljšana stabilnost, održivost i dugoročna proširivost
Postavke i prilagodba
- Nova namjenska stranica postavki: WooCommerce → Postavke → Proizvodi → Najniža cijena
- Prilagodljiv tekst oznake “Najniža cijena u zadnjih 30 dana”
- Odvojene opcije stila za pojedinačne proizvode i shop/arhivske stranice
- Odabir boja za tekst i graf
- Automatsko generiranje i osvježavanje CSS datoteke
Povijest cijena i graf
- Interaktivni graf povijesti cijena (Chart.js)
- Podrška za linijski i stupčasti prikaz
- Tri lokacije prikaza grafa: tab proizvoda, modal nakon cijene, modal u meta sekciji
- Podrška za tamni način rada
- AJAX ažuriranje grafa pri odabiru varijacija
- Per-product opcija za isključivanje prikaza grafa
Admin alati i održavanje
- Admin meta box za pregled, uređivanje i ručno dodavanje zapisa povijesti cijena
- Brisanje zapisa uz potvrdu
- Novi Repair & Maintenance alat:
- skeniranje nekonzistentnosti
- automatski popravci (bez brisanja podataka)
- regeneracija meta podataka
Baza podataka i performanse
- Zadržana postojeća tablica povijesti cijena (potpuna kompatibilnost s v1.x)
- Dodana type kolona za razlikovanje tipova cijena
- Dodani dodatni indeksi za brže upite na velikim katalozima
- Cursor-based i batched obrada za stabilan rad na slabijim hosting okruženjima
Sigurnost
- Zaštita svih formi i AJAX poziva (nonce + capability checks)
- Prepared SQL upiti za sve operacije s bazom
- Sanitirani svi ulazi, escapani svi ispisi
- Riješeni race condition problemi pri istovremenim izmjenama cijena
Ispravci grešaka
- Ispravljeni problemi s timestamp-ovima i inicijalnim zapisima cijena
- Riješeni duplikati aktivnih zapisa
- Točniji izračun najniže cijene kod varijabilnih proizvoda
- Popravljeni problemi s prikazom grafa i AJAX-om
- Uklonjeni CSS konflikti s nekim WooCommerce temama
Za programere
- Novi action hookovi: lowest_price_loaded, lowest_price_after_price_update, lowest_price_graph_rendered
- Novi filter hookovi: lowest_price_graph_data, lowest_price_display_html, lowest_price_label_text
- Jasnije debug poruke za WP_DEBUG
- Poboljšana interna dokumentacija
- Detaljni komentari u kodu
Razno
- Uklonjene hardkodirane konstante i unaprijed definirani stilovi
- Sva konfiguracija sada upravljana kroz admin sučelje
- Ažurirane Chart.js biblioteke
- Puna kompatibilnost s WordPress 6.9, WooCommerce 10.5 i PHP 8.1–8.4








Pozdrav, odličan napredak, bravo! Što se događa kod varijabilnih proizvoda ako je samo jedna varijacija na akciji? Meni ne prikazuje najnižu cijenu u tom slučaju..
Pozdrav Marjana,
hvala na komentaru. Provjerit ću još jednom ponašanje plugina kad samo jedna varijacijam ima akcijsku cijenu. Javim uskoro.
Lp, Borko
Pozdrav Borko,
testirala sam dodavanje novog proizvoda i u istom danu sam postavila akcijsku cijenu. Info o najnižoj cijeni se ne prikaže.
Drugi scenarij je kad dupliciram postojeći proizvod (to često voditelji shopova rade), s tim da je proizvod imao akcijsku cijenu, onda mi se kao osnovna cijena prikaže akcijska od originalnog proizvoda. Kao da plugin ne gleda polja standardna i akcijska cijena. Nastavno na to, promijenila sam standardnu cijenu (akcijsku sam ostavila). Na frontendu se dobro prikaže, ali u podacima o cijenama na stranici proizvoda tvog plugina nigdje ne vidim tu novu standardnu cijenu.
Hvala ti unaprijed na provjeri.
Bok Ivana,
Hvala na poruci. Radim na novoj verziji, neke od ovih stvari koje si navela bi trebale biti rješene. Javim se u ponedjeljak (trenutno sam na putu), pošaljem novu verziju.
Lp, Borko