Obveza vrijedi od 1. listopada 2026. Ostalo je 9 dana.

Objava cjenika na webshopu: XML i CSV, svaki dan

Odluka o objavi cjenika (NN 101/2026) traži cjenik u XML ili CSV obliku na mrežnoj stranici, osvježen svaki dan do 8:00 i dostupan 30 dana. Dodatak to radi sam, na stalnoj adresi i s arhivom.

Sve o dodatku

Što propis traži

Odluka o objavi cjenika, objavljena u NN 101/2026 dana 11.9.2026., uvodi obvezu objave cjenika na mrežnoj stranici trgovca. Primjenjuje se od 1. listopada 2026. i vrijedi za one koji mrežnu stranicu imaju, što webshop po definiciji ima.

  • Oblik: XML ili CSV, dakle pogodan za automatsku obradu. PDF i slika ne prolaze jer ih stroj ne može pročitati bez pogađanja.
  • Osvježavanje: svaki dan, do 8:00 ujutro.
  • Dostupnost: objavljeni cjenik ostaje dostupan 30 dana.
  • Sadržaj: naziv i cijena artikla, sidrena cijena i podaci o posebnim oblicima prodaje, dakle o sniženjima.

Kazne su iste kao za sidrenu cijenu, jer dolaze iz istog zakona: 3.000 do 30.000 € trgovcu i 1.000 do 4.000 € odgovornoj osobi.

Kako to izgleda kad radi

Svaki dan, odmah nakon snimanja cijena, cijeli se katalog izveze u odabrane formate i objavi na stalnoj adresi. Dnevna datoteka ostaje kao arhiva, a uz nju stoji i datoteka bez datuma koja uvijek pokazuje najnoviji cjenik.

Time onaj tko cjenik povlači strojno ne mora pogađati kako se datoteka danas zove: može ciljati stalnu adresu i uvijek dobiti aktualno stanje, ili proći kroz arhivu ako mu treba određeni dan.

Početak adrese je postavka. Ako trgovina već ima stranicu na /cjenik/, promijenite ga i stranica ostaje netaknuta; dodatak sam provjerava postoji li takva stranica i prijavi sudar prije nego se dogodi.

https://vasa-trgovina.hr/cjenik/              ← popis i poveznice
https://vasa-trgovina.hr/cjenik/cjenik.csv    ← uvijek najnoviji
https://vasa-trgovina.hr/cjenik/cjenik.xml
https://vasa-trgovina.hr/cjenik/cjenik.json
https://vasa-trgovina.hr/cjenik/cjenik-2026-09-21.csv
https://vasa-trgovina.hr/cjenik/index.json    ← popis svih dana

Naziv datoteke je propisan, sintaksa nije

Ovo se najčešće previdi. Točka VI. Odluke traži da naziv datoteke sadrži oblik prodajnog objekta, adresu, oznaku objekta, broj pohrane te datum i vrijeme objave. Datoteka nazvana cjenik.csv taj uvjet ne ispunjava.

Ono što Odluka ne propisuje jest kojim se redom i kojim razdjelnikom ti elementi spajaju, niti postoji XSD shema ili propisan redoslijed stupaca. Zato dodatak donosi jednu odluku i dokumentira je, umjesto da pogađa:

Podaci o objektu su postavka. Za webshop bez fizičke poslovnice zadano je internet trgovina, a adresa se uzima iz WooCommerce postavki trgovine.

Pojam broj pohrane Odluka ne definira. Ovdje se tumači kao redni broj objave, koji raste sa svakim izvozom i nikad se ne ponavlja. To tumačenje piše i u uputama, da trgovac zna što brani ako ga netko pita.

Uz propisanu datoteku ostaje i cjenik.csv bez vremenske oznake. Odluka je ne traži, ali bez nje onaj tko cjenik povlači automatski mora svaki dan pogađati novi naziv.

INTERNET-TRGOVINA_LUKORANSKA-17-ZAGREB_1_42_21092026_0315.csv

oblik_adresa_oznaka_brojPohrane_ddmmgggg_hhmm

Tri formata, isti sadržaj

CSV je razdvojen točkom-zarezom, jer je to zapis koji daju hrvatski ERP-ovi i Excel s hrvatskim regionalnim postavkama. Brojevi u njemu imaju decimalnu točku i nemaju razdjelnik tisuća: hrvatski zarez uz točku-zarez kao razdjelnik polja glavni je izvor pogrešnog čitanja.

XML nosi jedan element po artiklu i zaglavlje s nazivom trgovine, datumom i valutom. JSON ima isto to, plus broj artikala na kraju, pa se nepotpuna datoteka odmah prepozna.

Formati se biraju u postavkama. Isključite li sve, ostaje CSV, jer uključen cjenik bez ijednog formata ne bi proizveo ništa, a trgovac bi mislio da objavljuje.

Arhiva i popis u JSON-u

Uz cjenike stoji index.json, koji nabraja sve dostupne dane i adrese po formatima, uz naziv trgovine, datum zadnjeg izvoza, broj artikala i popis stupaca. To je ulazna točka za bilo koga tko cjenik povlači automatski.

Koliko se dana čuva je postavka; zadano devedeset, a ispod 30 se ne može jer toliko propis traži. Stariji dnevni cjenici se brišu, a najnoviji uvijek ostaje.

{
  "trgovac": "Vaša trgovina",
  "azurirano": "2026-09-21 03:22:14",
  "dan": "2026-09-21",
  "artikala": 4318,
  "stupci": ["sifra", "naziv", "barkod", "…"],
  "najnoviji": { "csv": "…/cjenik.csv", "xml": "…", "json": "…" },
  "arhiva": [ { "dan": "2026-09-21", "formati": { … } } ]
}

Zašto se poslužuje kroz PHP

Datoteka u mapi uploads javna je i na Apacheu i na nginxu, a pravilo u .htaccess vrijedi samo na Apacheu. Zato cjenik ne stoji na izravnoj adresi nego prolazi kroz WordPress, gdje se poštuje postavka o javnosti bez obzira na posluživač.

Time su i zaglavlja pod kontrolom: točan tip sadržaja, naziv datoteke i zabrana pogađanja tipa. Preglednik koji otvori CSV ne dobije stranicu, a alat koji ga povlači ne mora nagađati kodiranje.

Postavkom se cjenik može sakriti od javnosti. Tada adresu vide samo prijavljeni administratori trgovine, što je korisno dok se izvoz provjerava prije nego ga date dobavljaču.

Veliki katalozi

Izvoz ide u serijama, kao i snimanje cijena. Piše se u privremenu datoteku i preimenuje tek kad je cijeli katalog unutra, pa tko god cjenik dohvati usred izvoza dobije jučerašnji, cijeli, umjesto današnjeg polovičnog.

To je razlika koja se ne vidi dok ne zatreba: polovičan cjenik ne izgleda pokvareno, samo ima manje artikala, i nitko to ne primijeti dok netko ne pita zašto mu artikl nedostaje.

Prilagodba sadržaja

Redak prolazi kroz filter prije zapisivanja, pa se vrijednosti mogu promijeniti ili dopuniti iz teme ili vlastitog dodatka, bez diranja izvornog koda.

add_filter( 'klikoteka_cjenik_red', function ( $red, $product ) {
	$red['kategorija'] = strtoupper( $red['kategorija'] );
	return $red;
}, 10, 2 );

Stupci izvoza (prvih jedanaest je točka III. Odluke)

StupacŠto sadrži
nazivNaziv artikla kako stoji u trgovini
sifraSKU artikla; kad ga nema, WooCommerce ID
markaIz WooCommerce taksonomije marki, ili iz atributa marka/brand
jedinica_mjereKad postoji. Odluka je traži samo ako je primjenjiva
cijena_za_jedinicuJedinična cijena, kad su poznati jedinica i sadržaj
maloprodajna_cijenaCijena s PDV-om, onakva kakvu kupac vidi
posebni_oblik_prodajePrazno ili sniženje
sidrena_cijenaCijena na referentni dan, kad postoji
sidrena_na_danKoji je to dan. Nije isti za sve artikle: hrana i kozmetika nose 2.5.2025., ostalo 10.9.2026.
barkodGTIN/EAN iz WooCommerceova polja, kad je popunjen
dostupnostdostupno ili nedostupno, uz količinu kad se vode zalihe
kategorijaPune kategorije, odvojene kosom crtom
cijena_bez_pdvIsta cijena bez PDV-a
valutaValuta trgovine, npr. EUR
najniza_30_danaNajniža cijena u prozoru, kad ima pokrića
urlAdresa artikla na trgovini
Pitanja

Često pitano

  • Koliko dugo traje izvoz kataloga od nekoliko tisuća artikala?

    Ovisi o poslužitelju, ali obrada ide u serijama od zadanog broja artikala i svaka serija zakaže sljedeću. Tipično je gotovo u nekoliko minuta, a u međuvremenu je stari cjenik i dalje dostupan cijeli.

  • Mogu li izvoziti samo pojedine kategorije?

    Izvoz zahvaća cijeli objavljeni katalog. Sadržaj svakog retka može se mijenjati kroz filter klikoteka_cjenik_red, a redak koji filter isprazni izlazi iz cjenika.

  • Ulaze li varijacije u cjenik?

    Da, svaka varijacija ide kao vlastiti redak, sa svojom šifrom i cijenom. Varijabilni roditelj nema vlastitu cijenu pa se ne izvozi, jer bi njegov redak bio prazan ili proizvoljan.

  • Mora li cjenik nositi i sidrenu cijenu?

    Da, propis traži i nju, uz podatke o sniženjima. U izvozu su to stupci sidrena_cijena, sidrena_na_dan, na_snizenju i najniza_30_dana. Kako Odluka ima dva referentna dana, stupac sidrena_na_dan se razlikuje od artikla do artikla, a jedna datoteka svejedno pokriva cijeli katalog.

  • Je li cjenik indeksiran na Googleu?

    Stranica s popisom nosi noindex, a same datoteke su podaci, ne sadržaj za tražilice. Cjenik je namijenjen strojevima i ljudima koji ga traže, a ne rezultatima pretrage.

  • Što ako već imam feed za Google Shopping?

    To je drugi posao. Feed za oglašavanje ima svoja polja i svoja pravila. Ovaj cjenik je izvoz cijelog kataloga s cijenama i povijesnim podacima, u obliku koji se daje dobavljaču, agregatoru ili onome tko zatraži cjenik.

Dalje

Ostalo u istom dodatku

Sidrena cijena i cjenik za WooCommerce

Sve tri funkcije, jednokratno 20,00 € + PDV.