| 开发者 | juremjdd |
|---|---|
| 更新时间 | 2026年9月29日 19:14 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/sidrena-cjenik.
The prefix is text only; the date is added automatically in one of two formats:
Sidrena cijena (10.09.2026.) : 19,99 €
Sidrena cijena na 10.09.2026. : 19,99 €
Hovering the row shows a tooltip with an explanation (can be turned off). The prefix and tooltip can be translated with WPML, Polylang, TranslatePress, or Loco Translate.
The line under the product price has the CSS class sidrena-cijena so you can style it in the theme or Customizer (Appearance → Customize → Additional CSS). The default size is 14px (12px on mobile), without bold.
Features
sidrena_cijena_price_to_display when MPC is calculated outside WooCommerce Tax[sidrena-cijena id="d1"][sidrena-cijena id="x"] for pages/sidrena-cjenik (always without Woo; on a shop only after HTML stranica /sidrena-cjenik is turned on)Prefix (date) or Prefix date (the word “na” belongs in the prefix). An empty prefix with Prefix date prints only the date and the amount/sidrena-cijena.xml or /sidrena-cijena.csv (choose format in settings; manual or daily after 00:05)vrsta, sidrena_datum, dostupno/nedostupno, barcode from GTIN, UPC, EAN or ISBN, and brand (marka) from a chosen taxonomy or a manual field. Each outlet keeps its own availability/arhiva-sidrene-cijene (prodavaonica_Ilica 150 Zagreb_P-01_104_01.10.2026_07:45.xml or .csv)/sidrena-cijena.xml stays the webshop file. Each poslovnica has its own feed (/sidrena-cijena-001.xml), HTML page (/sidrena-cjenik/001), and 30-file archive. /sidrena-cjenik is the webshop table and includes the webshop download[sidrena-cjenik] prints the searchable pricelist table (name, SKU, barcode, prices, availability) on any page. oznaka="001" limits it to one outlet. [sidrena-arhiva oznaka="001"] does the same for the archive listakcija, unless that product or manual row sets another name[sidrena-cijena] for product loops and custom templates. prikaz="redovna", prikaz="akcijska", or prikaz="sidrena" prints only that amountdo_action( 'sidrena_cijena' ); or sidrena_cijena();sidrena-cijena folder to wp-content/plugins/.[sidrena-cijena id="d1"] from a row onto a page./sidrena-cijena.xml or /sidrena-cijena.csv, or leave daily regeneration after 00:05. Turn on HTML stranica /sidrena-cjenik if you also want the full HTML page. The archive is at /arhiva-sidrene-cijene./sidrena-cijena-001.xml (its object code) and its own 30-file archive. Dodatne stavke are appended to every outlet file.[sidrena-cjenik] (or [sidrena-cjenik oznaka="001"] for one outlet). The shortcode is also shown on the Public feed tab, with a copy button.[sidrena-cijena id="x"] from a row onto any page so prices stay in admin. Paste [sidrena-cjenik] where you want the full searchable table./sidrena-cjenik. XML/CSV feed and 30-day archive work the same as with Woo.The admin Fill empty fields button processes 40 products per AJAX request. For a full catalog:
wp sidrena-cijena status
wp sidrena-cijena fill --dry-run
wp sidrena-cijena fill
wp sidrena-cijena fill --today
Default fill is a SQL copy of _regular_price into empty _sidrena_cijena (does not overwrite values already stored). Variable/grouped parents are skipped; variations are filled. --today also writes today's date as the per-product reference date when that field is empty (products first put on sale after 10.09.2026.).
wp sidrena-cijena fill --safe uses WooCommerce product objects (same as the admin button, slower). Fallback: wp eval-file wp-content/plugins/sidrena-cijena/bin/fill.php
The sidrena price is stored in the same form as the WooCommerce regular price. On the storefront the plugin uses wc_get_price_to_display(), so the display follows WooCommerce → Settings → Tax (entered including or excluding tax, shop display with or without VAT). You do not need to re-enter prices after an update.
If the shop shows MPC with a custom VAT calculation (not WooCommerce Tax), hook sidrena_cijena_price_to_display so the sidrena amount matches the regular price. See Hook and shortcode.
Sidrena cijena settings (WooCommerce submenu, or a top-level menu without Woo):
[sidrena-cijena] / [sidrena-cijena id="x"] remainSidrena cijena (do not type the date here)Prefix (date) or Prefix date (e.g. put Sidrena cijena na in the prefix). Leave the prefix empty with Prefix date to print only the date and the amount, with no colon10.09.2026. (used for every product without its own date)02.05.2025.za kg/l). The phrase is added only to that row's sidrena label. The public feed uses separate fields: jedinica_mjere and cijena_jedinice_mjere, entered on the product or the manual row.[sidrena-cijena id="d1"].max_input_vars limits./sidrena-cjenik publishes the full HTML pricelist. The shortcode [sidrena-cjenik] works either way.wp sidrena-cijena fill or wp sidrena-cijena fill --today (see WP-CLI).Import/Export tab:
id, vrsta, naziv, sku, marka, url, jedinica_mjere, cijena_jedinice_mjere, maloprodajna_cijena, naziv_posebnog_oblika, sidrena_cijena, sidrena_datum, barkod, dostupnost. Published products only. Variations are separate rows. Dodatne stavke are at the end. A file that contains only services leaves out SKU, brand, unit, barcode, and availability.naziv, sku, cijena_redovna, cijena_akcijska, sidrena_cijena, including unpublished products, only where sidrena is emptyPublic feed tab. Price list of published products and variations (or the standalone catalog): https://shop.example/sidrena-cijena.xml or .csv (format is a setting; default XML).
Fields: id, vrsta, naziv, sku, marka, url, jedinica_mjere, cijena_jedinice_mjere, maloprodajna_cijena, naziv_posebnog_oblika, sidrena_cijena, sidrena_datum, barkod, dostupnost. vrsta is proizvod or usluga. sidrena_datum is that row's date, or the shop default when the row date is empty. naziv for a variation is the parent title plus every attribute, including when WooCommerce stores only the parent name. marka comes from the taxonomy chosen in settings, then from the manual brand in settings. A manual row uses its own Marka field first. maloprodajna_cijena is the sale price while that sale is active, otherwise the regular price, using the same tax display as the shop. naziv_posebnog_oblika is akcija in that case, or the name entered on the product or manual row. It is empty when no sale price is active. jedinica_mjere and cijena_jedinice_mjere stay empty until entered. Barcode is read from WooCommerce GTIN/UPC/EAN/ISBN (_global_unique_id). On a shop, the webshop file takes availability from stock status. Each outlet file uses the availability stored for that poslovnica, not the webshop stock. Rows from Dodatne stavke are appended after the shop products (id prefixed with d, barcode empty, availability from that row's dropdown) and only in the feed they belong to. Without WooCommerce, every row has a Dostupno/Nedostupno dropdown (default Dostupno). A file that contains only services leaves out SKU, brand, unit, barcode, and availability, and the HTML table does not draw those empty columns.
Generated with the "Generate public feed" button or daily after 00:05 (on by default; WordPress timezone, so the file is ready before 08:00). A visit to a missing file does not rebuild the catalog in that request: the response is 503 and one background rebuild is queued, with a 15-minute cooldown. The file is stored in wp-content/uploads/sidrena-cijena/. The HTML page and [sidrena-cjenik] serve the table written in that same run. Until the file exists they show a short preparing message and queue one rebuild; they do not walk the catalog.
The daily cron also stores a legally named file in the archive, following the 18 September 2026 ministry example prodavaonica_Ilica 150 Zagreb_P-01_104_01.10.2026_07:45.xml (date DD.MM.YYYY, time HH:MM; spaces and hyphens stay; 30 files maximum; the oldest is deleted). Regenerating on the same calendar day replaces that day's file and does not advance the storage number. On a Windows server the time is written 07-45 because a colon cannot be stored in a filename. Older YYYYMMDD_HHMM and sidrena-cijena_DD-MM-YYYY files stay listed. HTML listing: https://shop.example/arhiva-sidrene-cijene/. Set store type, address and object code on the Public feed tab.
Several outlets. Turn on Više poslovnica? in Settings. Those filename fields move to the Poslovnice tab, one set per outlet, plus the products assigned to it. /sidrena-cijena.xml stays the webshop file: Woo products plus manual rows assigned to the webshop. Each outlet with products is published at https://shop.example/sidrena-cijena-001.xml (or .csv; 001 is that outlet's object code), with its own HTML table and an archive of at most 30 files. /sidrena-cjenik is the webshop table and its download button is the webshop feed. Each outlet HTML page is https://shop.example/sidrena-cjenik/001/, with that outlet's table and download. Availability on an outlet file is the flag stored for that poslovnica. Format (XML or CSV) and the daily run after 00:05 still apply to every outlet. With the switch off, the single /sidrena-cijena.xml feed is unchanged.
Table shortcode. [sidrena-cjenik] prints only the searchable table (plugin design) on any page or in an Oxygen shortcode element. [sidrena-cjenik oznaka="001"] limits the rows to one outlet. Columns follow the public feed: name, SKU, brand, barcode, unit, unit price, retail price, sale-form name, sidrena price, availability. The name links to the product URL when one is set. The Public feed tab lists these shortcodes with a copy button.
Archive shortcode. [sidrena-arhiva] prints only the archived filenames and dates, in the same light-blue list. [sidrena-arhiva oznaka="001"] limits the list to one object code. The public archive page groups files by outlet when several are on. The Public feed tab shows these shortcodes with a copy button.
Without WooCommerce, the same table is also a page at https://shop.example/sidrena-cjenik/. On a WooCommerce shop that page is off until you turn on HTML stranica /sidrena-cjenik on the Public feed tab.
In settings, enable Cijena za jedinicu mjere (CJM). On each Woo product and variation, and on each row of Proizvodi or Dodatne stavke, a CJM switch appears. When that row's switch is on, you enter a unit phrase (e.g. za kg/l).
Sidrena cijena + za kg/l + parentheses format = Sidrena cijena za kg/l (10.09.2026.)
Sidrena cijena + za kg/l + “na” format = Sidrena cijena za kg/l na 10.09.2026.
Works alongside the Croatian 30-day Omnibus plugins WooCommerce Lowest Price by Igor Kovačić (1.x) and Media X / Borko Livić (2.x). Sidrena cijena is the fixed reference price; those plugins show the lowest price in the last 30 days while a product is on sale. When both are active the storefront order is: current price → sidrena cijena → 30-day lowest price, without a duplicate sidrena line. WPML and Polylang store each translation as its own product and do not copy the sidrena field, so the storefront uses the default-language sidrena when the translated product has none.
The core filter is woocommerce_get_price_html (priority 9999). It covers Storefront, Astra, GeneratePress, OceanWP, Kadence, Blocksy, and most themes that call $product->get_price_html().
Builders that often skip that filter have extra PHP hooks plus JS injection into their .price container:
woocommerce-product-pricejet-single-price, shopengine-product-price[product_price], wrapper .wpb_wrapper > p.price.oxy-product-price)et_pb_wc_price / block divi/wc-product-priceproduct-price.wd-single-price, .product-page-pricewoocommerce/product-priceOutput goes through woocommerce_get_price_html (product page, shop, archive, related products - anywhere the theme calls get_price_html()), Woo blocks, and popular page builders.
For custom product loops (Elementor, page builder, custom PHP) use:
[sidrena-cijena id="123"]
[sidrena-cijena id="123" prikaz="sidrena"]
[sidrena-cjenik]
[sidrena-cjenik oznaka="001"]
[sidrena-arhiva]
[sidrena-arhiva oznaka="001"]
[sidrena-cjenik] prints only the searchable pricelist table, using the plugin table design. Put it on any page or in an Oxygen shortcode element. With multiple outlets, oznaka limits the table to that poslovnica. Without it, the table lists every product.
[sidrena-arhiva] prints only the archive file list: each legal filename and its date. It does not add a title or a back link. oznaka keeps one object code. Older filenames that have no object code stay in the list only when oznaka is omitted.
Without WooCommerce, [sidrena-cijena id="123"] prints that catalog row's current price and sidrena line. On a shop, [sidrena-cijena id="d1"] does the same for a row on Dodatne stavke. Add prikaz="redovna", prikaz="akcijska", or prikaz="sidrena" to print only that amount, for example 120,00 €. Without prikaz, the full line with the label and tooltip stays. An empty sale price prints nothing. A variable product with a price range prints od plus the amount. Paste it once and change prices in Sidrena cijena, not on the page.
In a PHP template:
echo do_shortcode( '[sidrena-cijena]' );
do_action( 'sidrena_cijena' );
sidrena_cijena();
sidrena_cijena( $product );
Filter the storefront amount after WooCommerce tax display. Arguments: $amount (float), $product (WC_Product), $raw (stored sidrena string, same basis as _regular_price). Does not change the value stored in the product field.
add_filter( 'sidrena_cijena_price_to_display', function( $amount, $product, $raw ) {
return (float) $amount * 1.25;
}, 10, 3 );
Dostavu postavite kao uslugu (kartica Dodatne stavke ili Proizvodi, vrsta Usluga) te koristite shortcode za programatski ispis, npr. [sidrena-cijena id="d1" prikaz="sidrena"]. Na trgovini s WooCommerceom ručni redak ide s prefiksom d. Integracija sidrenih cijena za dostave nije dio plugina zbog raznih dostupnih načina kalkulacije i prikaza istih.
The line under the product price has the class sidrena-cijena. Use it for color, size, or alignment. The tooltip is on hover/focus of the whole row (no “i” icon). Default: 14px / 12px on mobile, font-weight: 400.
HTML structure:
<span class="sidrena-cijena sidrena-cijena--has-tooltip">
<span class="sidrena-cijena__text">…</span>
<span class="sidrena-cijena__tooltip">…</span>
</span>
Classes:
.sidrena-cijena - the whole row under the product price (main class for styling).sidrena-cijena__prefix - prefix text with the date (e.g. Sidrena cijena (10.09.2026.)).sidrena-cijena__sep - colon between prefix and amount, or a space when the prefix is empty and the date format is plain.sidrena-cijena__amount - sidrena price amount.sidrena-cijena__tooltip - tooltip text (hover/focus on the whole row, no icon).sidrena-cijena--variable - variable product while no variation is selected.sidrena-cijena { font-size: 14px; color: #555; }
.sidrena-cijena__amount { font-weight: 700; color: #111; }
/sidrena-cjenik keeps the webshop table and always offers the webshop XML/CSV download when several outlets are on. Each outlet has its own HTML page at /sidrena-cjenik/{oznaka} with that outlet's table and download.[sidrena-arhiva oznaka="001"] lists archive files for one object code. The public archive page groups files by outlet.sidrena-cijena_DD-MM-YYYY links stay as they were.glob(), so hosts without that flag still list XML and CSV files.[sidrena-cijena prikaz="redovna"], prikaz="akcijska", or prikaz="sidrena" prints only that amount. Without prikaz the full line stays. An empty sale price prints nothing. A variable product with a range prints od plus the amount.vrsta and sidrena_datum. With several outlets, /sidrena-cijena.xml stays the webshop file. Each poslovnica keeps its own feed, HTML table, and 30-file archive. A service is written only into the feed it belongs to. A file that contains only services leaves out SKU, brand, unit, barcode, and availability.[sidrena-cjenik] serve the table saved with the feed. A missing file shows a preparing message and queues one rebuild instead of loading every product on the request.[sidrena-arhiva] prints only the archive filenames and dates.DISABLE_WP_CRON is not set, the Public feed tab warns that 00:05 runs on the next PHP request and how to call wp-cron.php from system cron. It also warns when the last successful file is older than 26 hours.prodavaonica_Ilica 150 Zagreb_P-01_104_01.10.2026_07:45. Spaces, hyphens, and typed case stay. Date is DD.MM.YYYY and time is HH:MM. Windows servers write the time as 07-45.marka. Settings: pick a product taxonomy and/or type a fallback brand. Manual rows (Proizvodi / Dodatne stavke) have their own Marka field.[sidrena-cijena] shows a price only for a published product the visitor can open. Drafts, private products, and password-protected products stay hidden. Catalog-hidden products are left out of the public XML, CSV, and HTML cjenik.maloprodajna_cijena) plus naziv_posebnog_oblika. An active sale price writes akcija unless the product or manual row sets another name.jedinica_mjere and cijena_jedinice_mjere. The CJM label suffix stays on the storefront line and is no longer a feed column.mjerna_jedinica, and a Mjerna jedinica column in the HTML table./sidrena-cjenik) includes barcode and Dostupno/Nedostupno as well as the prices./sidrena-cjenik from the Public feed tab. It stays off until then.[sidrena-cijena id="d1"]./sidrena-cijena-{oznaka}.xml (or .csv) and its own 30-file archive. Daily generation after 00:05 covers every outlet that has products.[sidrena-cjenik] prints only the pricelist table (plugin design) on any page. Optional oznaka="001" limits the rows to one outlet.[sidrena-cijena id="x"] shortcode for non-Woo pages.dostupno/nedostupno from WooCommerce stock and barcode from GTIN, UPC, EAN or ISBN..summary.OBLIK_ADRESA_OZNAKA_POHRANA_YYYYMMDD_HHMM (date format YYYYMMDD, time HHMM)./sidrena-cjenik.pll_translate_string() is called with the language code (or pll__()), fixing a PHP 8 critical error./sidrena-cijena.xml or /sidrena-cijena.csv). Archive files keep the type they were generated as.wp sidrena-cijena fill --today.sidrena_cijena_price_to_display for shops that add VAT outside WooCommerce Tax.