{
  "name": "R2 Sidrena Cijena",
  "slug": "r2-sidrena-cijena",
  "version": "1.7.6",
  "requires": "6.0",
  "tested": "7.1",
  "requires_php": "8.0",
  "author": "<a href='https://rise2.studio'>RISE2 Studio</a>",
  "author_profile": "https://rise2.studio",
  "homepage": "https://rise2.studio",
  "last_updated": "2026-10-02",
  "download_url": "https://plugins.rise2.studio/r2-sidrena-cijena/r2-sidrena-cijena-1.7.6.zip",
  "sections": {
    "description": "<p>Dodatna („sidrena“) cijena za WooCommerce: referentna cijena s datumom uz cijenu proizvoda, red za provjeru u adminu, uvoz po SKU i tihi zapis povijesti cijena za kasniji prikaz najniže cijene u 30 dana.</p><p><strong>Sjetva nije objava.</strong> Na aktivaciji se svaki proizvod popuni iz njegove današnje redovne cijene, ali se kupcima ne prikazuje ništa dok ne dođe trenutak puštanja u rad (zadano 30.09.2026. u 23:59). Dani između su tu da se početne vrijednosti provjere.</p><p><strong>Objava cjenika.</strong> Plugin objavljuje i strojno čitljivi cjenik u .xml i .csv obliku prema Odluci o objavi cjenika (NN 101/2026): roba jednom dnevno, usluge pri svakoj promjeni, datoteke dostupne 30 dana, plus dohvat cijena u realnom vremenu. Sidrena cijena je obavezan stupac i uzima se iz istog izvora kao prikaz na webu.</p>",
    "changelog": "<h4>1.7.6</h4><ul><li><strong>Cjenik se više ne prekida.</strong> Proizvod u skici s varijacijama (ili proizvod zaštićen lozinkom) prekidao je svako generiranje porukom &bdquo;Katalog je prekinut usred generiranja&ldquo; i datoteka se nije objavljivala.</li><li><strong>Samo objavljeni proizvodi, svugdje:</strong> spremnost, popisi za provjeru, izvoz, popunjavanje sidrenih cijena i povijest cijena više ne uzimaju skice, privatne, proizvode na čekanju ni zaštićene lozinkom.</li><li>CSS i JS linija cijena nose <code>data-no-minify</code> (WP Rocket).</li></ul><h4>1.7.5</h4><ul><li>Sidrena cijena, najniža cijena u 30 dana i objašnjenje: 12px u standardnom načinu, 0.12rem u rem načinu.</li></ul><h4>1.7.4</h4><ul><li>U RISE2 temi obje dodatne cijene uvijek su divovi unutar <code>.regular-product-price</code>, nakon glavne cijene; ne postaju izravna djeca <code>.price-cart</code> niti se umeću u p/span elemente.</li></ul><h4>1.7.3</h4><ul><li>Obje dodatne cijene i objašnjenje: 14px u standardnom prikazu, 0.14rem u RISE2 rem prikazu (umjesto 0.82em ovisnog o glavnoj cijeni).</li></ul><h4>1.7.2</h4><ul><li>Postavka &bdquo;Položaj dodatnih cijena&ldquo; vrijedi i za našu najnižu cijenu u 30 dana; nakon bloka cijene obje su linije zasebni divovi, redoslijed se čuva i pri AJAX promjenama.</li></ul><h4>1.7.1</h4><ul><li>Prikaz &bdquo;Nakon bloka cijene&ldquo;: ispravno uz <code>.omnibus-info</code>, uz span varijacije unutar <code>p.price</code> i uz obrazac varijacija izvan bloka cijene.</li></ul><h4>1.7.0</h4><ul><li>Nova postavka &bdquo;Položaj sidrene cijene&ldquo;: span unutar cijene (zadano) ili zaseban div nakon bloka cijene, uz premještanje nakon AJAX promjena i varijacija.</li></ul><h4>1.6.0</h4><ul><li><strong>Gdje se prikazuje:</strong> sidrena cijena i najniža u 30 dana mogu se zasebno uključiti ili isključiti za 1., 2. i daljnje ispise cijene na stranici proizvoda i za popise proizvoda — za teme koje cijenu istog proizvoda ispisuju više puta (npr. glavna cijena i „Cijena za jednokratno plaćanje“). Zadano je sve uključeno, kao i dosad.</li><li><strong>„Označi ispise cijene“</strong> u gornjoj traci na webu: uz svaki ispis cijene njegov broj, samo za administratora.</li><li><strong>WooCommerceove rečenice za čitače zaslona</strong> („Izvorna cijena bila je: …“, „Trenutna cijena je: …“) po defaultu se sakrivaju s ekrana na temama koje ih prikazuju; čitačima zaslona ostaju.</li><li>Upozorenje u Postavkama i na Pregledu kad linija ne stoji ondje gdje je pravila očekuju.</li><li>Ispravljeno: odabir varijacije više ne sakriva linije varijabilnih proizvoda u „Povezanim proizvodima“.</li><li>Sigurnost: pozadinski poslovi (Action Scheduler, cron, WooCommerceovi e-mailovi) nikad ne dobivaju liniju PREGLED, ni kad se izvršavaju s administratorovim kolačićima.</li></ul><h4>1.5.0</h4><ul><li><strong>Naziv datoteke cjenika u obliku iz Pojašnjenja Ministarstva (t. 2.4):</strong> <code>webshop_Ilica 150 Zagreb_P-01_104_01.10.2026_07:45.xml</code> — tekst kako je upisan, datum DD.MM.GGGG, vrijeme HH:MM (trenutak objave), broj pohrane s tri znamenke i nikad ponovljen.</li><li><strong>Proizvod na narudžbu (backorder) je „nedostupno“</strong> — dostupno je samo ono što je stvarno na zalihi (t. 2.5).</li><li>Shortcodei više ne prikazuju cijenu skice, zakazanog ni privatnog proizvoda.</li><li><strong>Objašnjenje u rem mjerama RISE2 tema</strong> (1rem = 100 px dizajna), automatski prepoznato; opcionalni oblik objekta za cjenik usluga.</li></ul><h4>1.4.1</h4><ul><li>Ispravljeno upozorenje <code>Undefined variable $total</code> na kartici Provjera; napomena o skraćenom popisu akcija opet se prikazuje ispod popisa.</li></ul><h4>1.4.0</h4><ul><li><strong>Način pregleda za administratore.</strong> Najniža cijena u 30 dana ima tri stanja: isključeno, samo administratori, svi kupci.</li><li><strong>Oznaka PREGLED</strong> na svakoj liniji koju vidite samo vi, da se ne zamijeni s onim što vide kupci.</li><li><strong>„Cijene&ldquo; u gornjoj traci na webu</strong>: što kupci vide, i prekidač <strong>„Prikaži kao kupac&ldquo;</strong> — bez odjave i bez mijenjanja postavki.</li><li>Stranica s linijom za pregled nikad se ne sprema u keš; spremanje postavki prazni keš stranica.</li></ul><h4>1.3.1</h4><ul><li>Ispravljena dvostruka točka u „Snima se od 22.09.2026..“ u Pregledu.</li><li>Datum početka prikaza ispisuje se kao „30.09.2026. u 23:59“ umjesto „2026-09-30 23:59“.</li></ul><h4>1.3.0</h4><ul><li><strong>Najniža cijena u 30 dana prije sniženja</strong> (ZZP čl. 19), isključena po defaultu i uključiva u Postavkama. Ne dodaje se gdje drugi plugin već ispisuje najnižu cijenu.</li><li><strong>Računa se od početka sniženja, ne od danas</strong>; uračunava cijenu koja je vrijedila na početku prozora; sniženje u koracima je jedna akcija, a promjena redovne cijene ili rast akcijske cijene je nova.</li><li><strong>Provjera prekršaja</strong> nad svim proizvodima na akciji: akcijska cijena koja nije niža od najniže u 30 dana je od 17.06.2026. zaseban prekršaj.</li><li><strong>Ručni iznos po proizvodu i varijaciji</strong> za akcije starije od snimanja povijesti.</li><li><strong>Engleski uz hrvatski</strong>, hrvatski prvi (Zakon o hrvatskom jeziku čl. 11, ZZP čl. 60 st. 9); tekstovi po jeziku; mogućnost „samo jezik posjetitelja\" uz upozorenje.</li><li><strong>Povijest cijena snima se odmah nakon instalacije</strong> (dosad tek kad netko spremi proizvod), u spremljenim cijenama, i ne gubi se kod proizvoda na akciji.</li><li>Ispravljeno: znak % u tekstu oznake srušio bi svaku stranicu proizvoda; brojač proizvoda bio je za jedan manji.</li></ul><h4>1.2.4</h4><ul><li><strong>Ispravak &mdash; naziv akcije bio je prazan na svakom sniženom proizvodu</strong> u objavljenom cjeniku. Zakon tra&#382;i i taj podatak.</li><li><strong>Ispravak &mdash; trgovina bez SKU-ova nije mogla vratiti vlastiti izvoz.</strong> Uvoz sada prepoznaje proizvod po SKU-u, pa po ID-u.</li><li><strong>Ispravak &mdash; sidrena cijena izgledala je skriptama i usporednicima cijena kao prava cijena</strong> (nosila je WooCommerceovu oznaku iznosa). Sada ne.</li><li><strong>Ispravak &mdash; objašnjenje vi&scaron;e nije fokusabilno unutar poveznice kartice proizvoda</strong> (neispravan HTML, dvostruki tab).</li><li><strong>Upozorenje kad trgovina prikazuje cijene bez PDV-a</strong> &mdash; tada se stranica i cjenik razlikuju na svakom proizvodu.</li></ul><h4>1.2.3</h4><ul><li><strong>Ispravak &mdash; uključivanje objave vi&scaron;e se ne odbija.</strong> Trgovina bez upisane adrese (ni u pluginu ni u WooCommerceu) nije mogla uključiti objavu. Ne objaviti ni&scaron;ta gora je pozicija od objave pod izvedenim nazivom, pa se adresa sada razrje&scaron;ava redom: upisana &rarr; WooCommerce &rarr; domena.</li><li><strong>Umjesto zabrane, trajno upozorenje</strong> koje navodi točno koja se vrijednost koristi umjesto adrese.</li><li><strong>Prikaz naziva sljedeće objavljene datoteke</strong> u postavkama.</li></ul><h4>1.2.2</h4><ul><li><strong>Hitan ispravak &mdash; 1.2.1 je ru&scaron;io stranicu</strong> fatalnom gre&scaron;kom <code>R2SC_Feed::nudge(): Argument #1 ($seconds) must be of type int, string given</code>. WordPress svakoj funkciji na <code>init</code> proslijedi prazan string kao argument, pa metoda s tipiziranim skalarnim prvim parametrom baci TypeError. Kuka sada ide preko omotača bez parametara.</li><li>Dodana strukturna provjera u testovima koja tu vrstu gre&scaron;ke ubuduće hvata prije izdanja.</li></ul><h4>1.2.1</h4><ul><li><strong>Ispravak &mdash; objava cjenika se nije dala uključiti.</strong> Polja o objektu prikazivala su ponuđene vrijednosti kao placeholder, pa su izgledala ispunjeno a stizala prazna; provjera je tada odbila uključivanje i vratila kvačicu na isključeno. Sada se prikazuju kao prave vrijednosti, a odbija se samo adresa koja se stvarno ne može pretpostaviti.</li><li><strong>Ispravak &mdash; &bdquo;Generiraj sada&ldquo; je izgledao kao da ne radi ni&scaron;ta.</strong> Gumb je samo zakazao posao kroz WP-Cron. Sada odmah odradi posao u istom zahtjevu.</li><li><strong>Generiranje koje je stalo nastavlja se pri sljedećem otvaranju stranice</strong>, pa posao bez WP-Cron-a vi&scaron;e ne ostaje na nuli zapisa zauvijek.</li><li><strong>Upozorenje kad je WP-Cron isključen</strong>, s gotovom crontab linijom.</li></ul><h4>1.2.0</h4><ul><li><strong>Ispravak &mdash; spremanje proizvoda je prepisivalo podrijetlo sidrene cijene.</strong> Obična izmjena zalihe označila bi dokazano netaknutu cijenu kao &bdquo;ručno uneseno&ldquo;. Sada se piše samo stvarna promjena.</li><li><strong>Ispravak &mdash; varijabilni proizvodi nisu prikazivali sidrenu cijenu nigdje</strong> kad sve varijacije imaju istu cijenu. Neisticanje je ono što se kažnjava, pa to nije bila kozmetika.</li><li><strong>Stilovi za prikaz na webu</strong> &mdash; zaseban redak, manji i normalne debljine, bez <code>!important</code>. Plugin dosad nije isporučivao nijedan CSS.</li><li><strong>Objašnjenje kupcu na prijelaz mišem</strong>, uredivo i isključivo, s ispravnom pristupačnosti (opisuje se, ne imenuje).</li><li><strong>Jedan ekran s karticama</strong> umjesto dvije stavke u izborniku, i <strong>Pregled koji odgovara je li sve spremno</strong>.</li><li><strong>Filtar po stanju u popisu proizvoda</strong> i <strong>izvoz onih koje treba ispuniti</strong>, plus gotov SQL upit za backup od referentnog dana.</li><li><strong>Najveća odstupanja</strong>, <strong>ponovno popunjavanje praznih</strong>, <strong>polja za barkod i cijenu za jedinicu mjere</strong>, <strong>izbor taksonomije marke</strong>.</li><li><strong>Pregled za administratore</strong> prije go-live, <strong>shortcode</strong>, <strong>WP-CLI</strong>, <strong>samoobnova cjenika ako cron nije odradio</strong> i bilje&#382;enje gre&scaron;aka.</li><li><strong>Uvoz preživi pravi hrvatski ERP izvoz</strong> &mdash; razdjelnik i kodiranje se prepoznaju, XML pronalazi ponavljajući element, prazna ćelija znači &bdquo;ne diraj&ldquo;.</li><li>Skriveni i lozinkom za&scaron;tićeni proizvodi vi&scaron;e ne izlaze u objavljeni cjenik.</li></ul><h4>1.1.0</h4><ul><li><strong>Strojno čitljivi cjenik (.xml i .csv)</strong> prema Odluci o objavi cjenika, NN 101/2026 br. 1213, na snazi od 1.10.2026. Roba jednom dnevno (zadano 00:05; zakonski rok je 8:00), usluge pri svakoj promjeni, datoteke dostupne 30 dana.</li><li><strong>Puni zakonski skup stupaca</strong> &mdash; t. III za robu i t. IV za usluge. Sniženje se emitira kao <em>dva</em> podatka, zastavica i naziv oblika prodaje, jer zakon tra&#382;i oba.</li><li><strong>Naziv datoteke po t. VI</strong> (oblik objekta, adresa, oznaka, broj pohrane, vremenska oznaka), kao postavka &mdash; Odluka ne propisuje razdjelnik ni redoslijed, a &bdquo;broj pohrane&ldquo; nigdje ne definira.</li><li><strong>Dohvat u realnom vremenu (t. VII)</strong> &mdash; &#382;ivi feed uz dnevnu arhivu, jer statična dnevna datoteka to ne zadovoljava.</li><li><strong>Javna stranica cjenika</strong> na <code>/cjenik/</code>: jedna adresa za inspekciju, popis datoteka iz zadnjih 30 dana, renderirana bez teme.</li><li><strong>Polja po proizvodu</strong> za jedinicu mjere, količinu po jedinici mjere i naziv akcije &mdash; stupce koje WooCommerce nema.</li><li><strong>Brojač nepotpunih obaveznih stupaca</strong> u adminu: datoteka se generira jednako dobro i s praznom jedinicom mjere na devet tisuća redaka.</li><li><strong>Sidrena cijena dolazi iz istog izvora kao prikaz na webu</strong> &mdash; inspektor mo&#382;e povući feed i usporediti ga sa stranicom.</li><li><strong>Generiranje u serijama, objava tek kad je gotovo</strong> (<code>.part</code> pa atomski premje&scaron;taj). Polovična javno dostupna lista gora je od jučera&scaron;nje potpune.</li><li><strong>Nakon internog pregleda (48 nalaza, 34 potvrđena):</strong> sidrena cijena u cjeniku poštuje isti prekidač prikaza kao i web; obje cijene računaju se na istoj poreznoj osnovi i po osnovnim stopama trgovine, ne po lokaciji onoga tko dohvaća; akcija se prijavljuje po cijeni koja se stvarno naplaćuje; neuspjeli upit vi&scaron;e ne znači &bdquo;katalog je gotov&ldquo;; varijacije neobjavljenih proizvoda ne izlaze u cjenik; svaka lista se stvarno generira; &#382;ivi feed se poslu&#382;uje iz kratkotrajne datoteke (zadano 60 s) pa jedan robot ne mo&#382;e zauzeti sve PHP procese; objava se ne mo&#382;e uključiti bez podataka o objektu; pravila adresa obnavljaju se i nakon a&#382;uriranja.</li></ul><h4>1.0.0</h4><ul><li><strong>Prva verzija.</strong> Model podataka s podrijetlom: svaka sidrena cijena nosi stanje (netaknuto od referentnog dana, treba provjeru, potvrđeno, ručno uneseno, prva ponuda), pa se kasnije zna koje su brojke provjerene.</li><li><strong>Početno popunjavanje s trijažom</strong> po <code>post_modified</code>: proizvod koji od referentnog dana nije spreman kroz WooCommerce označen je kao dokazano ispravan, ostalo ide na provjeru.</li><li><strong>Vremenski prekidač prikaza</strong> — ništa se ne prikazuje kupcima do zadanog trenutka.</li><li><strong>Prikaz</strong> kroz <code>woocommerce_get_price_html</code>, plus <code>r2sc_the_reference_price()</code> i akcija <code>r2sc_reference_price</code> za ručno postavljanje u temu.</li><li><strong>Uvoz po SKU</strong> iz CSV-a ili XML-a, s prijavom svakog preskačenog retka.</li><li><strong>Tihi zapis povijesti cijena</strong> — ide već sada jer se povijest ne može naknadno napraviti.</li></ul>"
  }
}
