MJDD Sidrena Cijena

Description

With WooCommerce active, MJDD Sidrena Cijena stores each product and variation regular price in its own field and shows it next to the current price. Without WooCommerce, you enter products in a repeater and publish the same XML/CSV feed plus a public HTML pricelist at /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

  • Works with WooCommerce, or standalone on a plain WordPress site
  • Snapshot of the regular price on activation (does not overwrite values already entered)
  • Display follows WooCommerce tax settings (same VAT treatment as the regular price)
  • Filter sidrena_cijena_price_to_display when MPC is calculated outside WooCommerce Tax
  • Field below the sale price on simple products and on every variation
  • WooCommerce Sidrena cijena tabs: Settings, Import/Export, Public feed (top-level menu when Woo is not active)
  • Without Woo: product repeater (name, SKU, URL, regular, sale, sidrena) feeding the same export
  • Without Woo: public HTML pricelist at /sidrena-cjenik
  • Prefix without a date; storefront format: Prefix (date) or Prefix date (the word “na” belongs in the prefix)
  • Default reference date plus an optional per-product date (FMCG 02.05.2025. vs other goods 10.09.2026.)
  • Tooltip on hover of the whole row (switch, on by default)
  • Prefix and tooltip translations in WPML, Polylang, TranslatePress, or Loco Translate
  • Export of the price list and of products missing a sidrena price (CSV or XML)
  • Bulk import CSV/XML by SKU, with price column mapping (creates catalog rows when Woo is off)
  • Public price list at /sidrena-cijena.xml or /sidrena-cijena.csv (choose format in settings; manual or daily after 00:05)
  • 30-day archive at /arhiva-sidrene-cijene (OBLIK_ADRESA_OZNAKA_POHRANA_YYYYMMDD_HHMM.xml or .csv)
  • Optional unit-price (CJM) switch on the product, appended to the prefix, e.g. “za kg/l”
  • Automatic display below the price (can be turned off; the shortcode remains)
  • Shortcode [sidrena-cijena] for product loops and custom templates ([sidrena-cijena id="123"])
  • Universal hook: do_action( 'sidrena_cijena' ); or sidrena_cijena();
  • WooCommerce CSV product import / export columns
  • HPOS compatibility

Development: MJDD / Jure Zadravec – https://mjdd.hr

This is not legal advice.

WP-CLI

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`<h3>Tax (VAT)</h3>

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.

Settings

Sidrena cijena settings (WooCommerce submenu, or a top-level menu without Woo):

  • Automatic sidrena price display – Woo only; below the current price; when off, only [sidrena-cijena] / [sidrena-cijena id="x"] remain
  • Prefix – words only, e.g. Sidrena cijena (do not type the date here)
  • Date formatPrefix (date) or Prefix date (e.g. put Sidrena cijena na in the prefix)
  • Default reference date – e.g. 10.09.2026. (used for every product without its own date)
  • Per-product reference date – Woo only; leave empty for the default; for FMCG enter 02.05.2025.
  • Tooltip – switch and text (translate in WPML / Polylang / Loco)
  • CJM – Woo only
  • Products tab (without Woo) – repeater for the public pricelist. Required: name, regular price, sidrena price. Saved as one JSON field to avoid max_input_vars limits.
  • At the bottom of the Woo settings tab: Fill empty fields from the regular price – empty fields only; existing sidrena values are left alone. The date stays the shop default (e.g. 10.09.2026.). Fill empty sidrena prices with today’s date – same fill, plus today’s date on products that have no date yet (new products after the reference day). Empty-field snapshot also runs on activation. Saving a product does not fill sidrena automatically. For large catalogs use WP-CLI: wp sidrena-cijena fill or wp sidrena-cijena fill --today (see WP-CLI).
  • Delete all data and deactivate – removes sidrena prices, standalone catalog, settings, public XML and archive, then deactivates the plugin. Cannot be undone.

Import / export

Import/Export tab:

  • Bulk import – CSV or XML. With Woo: match by SKU (choose the column/node). Regular, sale, and sidrena prices are mapped separately; the default is Do not import. Import does not create Woo products, it only updates existing ones. Without Woo: rows with a matching SKU are updated, other rows are appended to the catalog (name, regular, and sidrena are required for new rows). Empty cells are skipped. The progress bar uses AJAX batches.
  • Export price list – all products and variations (or standalone catalog rows): naziv, sku, cijena_redovna, cijena_akcijska, sidrena_cijena
  • Export products without a sidrena price – same columns, only rows where sidrena is empty
  • Sidrena price, date, and CJM remain columns in WooCommerce Products Import/Export (for the catalog, not for the price list itself)

After importing sidrena prices, regenerate the public feed if you use it.

Public feed

Public 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, naziv, sku, url, cijena_redovna, cijena_akcijska, sidrena_cijena.

Generated with the “Generate public feed” button, on the first visit to the URL, or daily after 00:05 (on by default; WordPress timezone, so the file is ready before 08:00). The file is stored in wp-content/uploads/sidrena-cijena/.

The daily cron also stores a legally named file in the archive, following the HOK webinar template OBLIK_ADRESA_OZNAKA_POHRANA_YYYYMMDD_HHMM.xml (date YYYYMMDD, time HHMM; 30 files maximum; the oldest is deleted). Older 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.

Without WooCommerce, a searchable HTML pricelist is also published at https://shop.example/sidrena-cjenik/.

CJM

In settings, enable “Enable CJM switch”. On the product and variation, next to the sidrena price, a CJM switch appears. When it is on, you enter a prefix suffix (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.`<h3>Compatibility</h3>

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.

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:

  • Elementor / AnyWhere Elementor – widget woocommerce-product-price
  • JetWooBuilder / ShopEnginejet-single-price, shopengine-product-price
  • WPBakery – shortcode [product_price], wrapper .wpb_wrapper > p.price
  • Oxygen – Product Price element (.oxy-product-price)
  • Divi 4 / Divi 5 – module et_pb_wc_price / block divi/wc-product-price
  • Bricks – element product-price
  • Beaver Builder – WooCommerce price module
  • Breakdance / Brizy – CSS selectors for price elements
  • Avada / Fusion – Woo Price theme builder element
  • Woodmart / Flatsome.wd-single-price, .product-page-price
  • WooCommerce Blockswoocommerce/product-price

If a theme still does not show the line, put the shortcode or hook below the price in the template or loop.

Hook and shortcode

Output 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]
[sidrena-cijena id="123"]

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 );
<h3>Custom CSS</h3>
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
  • .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

Example:

.sidrena-cijena { font-size: 14px; color: #555; }
.sidrena-cijena__amount { font-weight: 700; color: #111; }

Screenshots

Installation

  1. Copy the sidrena-cijena folder to wp-content/plugins/.
  2. Activate the plugin.

With WooCommerce

  1. WooCommerce Sidrena cijena Settings: prefix, date format, default date, tooltip.
  2. Edit the sidrena price and date on a product if needed (below the sale price).
  3. Import/Export: export the price list or bulk-import CSV/XML by SKU.
  4. Public feed: choose XML or CSV, generate /sidrena-cijena.xml or /sidrena-cijena.csv, or leave daily regeneration after 00:05. The archive is at /arhiva-sidrene-cijene.

Without WooCommerce

  1. Sidrena cijena Proizvodi: add rows (name, SKU, URL, regular price, sale price, sidrena price) or import CSV/XML.
  2. Settings: prefix, date format, default date, tooltip.
  3. Public HTML pricelist: /sidrena-cjenik. XML/CSV feed and 30-day archive work the same as with Woo.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“MJDD Sidrena Cijena” is open source software. The following people have contributed to this plugin.

Contributors

Translate “MJDD Sidrena Cijena” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.12.1

  • Variable products: do not strip the selected variation’s sidrena line. Dedupe stays inside the price node, not the whole .summary.

1.12.0

  • Public archive filenames follow the HOK webinar template: OBLIK_ADRESA_OZNAKA_POHRANA_YYYYMMDD_HHMM (date format YYYYMMDD, time HHMM).
  • Daily regeneration runs after 00:05 so the day’s pricelist is published before the 08:00 deadline.
  • Public feed settings: store type, address, object code, and storage sequence.

1.11.0

  • Works without WooCommerce: product repeater, same XML/CSV feed, public HTML pricelist at /sidrena-cjenik.
  • Polylang: pll_translate_string() is called with the language code (or pll__()), fixing a PHP 8 critical error.

1.10.1

  • CSV exports neutralize spreadsheet formula prefixes (=, +, -, @, tab, CR) to prevent formula injection from product data.
  • Direct file access guards on remaining PHP entry points (ABSPATH).

1.10.0

  • Public feed format setting: XML or CSV (/sidrena-cijena.xml or /sidrena-cijena.csv). Archive files keep the type they were generated as.

1.9.9

  • Directory identity: MJDD Sidrena Cijena (slug mjdd-sidrena-cijena). Product meta, settings, shortcode, and storefront CSS class are unchanged.
  • Public archive CSS is registered and printed via WordPress style APIs.
  • Uploads paths use wp_upload_dir() only.

1.9.8

  • Settings button to fill empty sidrena prices with today’s date (products added after 10.09.2026.). WP-CLI: wp sidrena-cijena fill --today.

1.9.7

  • Settings action to delete all plugin data and deactivate the plugin.

1.9.6

  • Filter sidrena_cijena_price_to_display for shops that add VAT outside WooCommerce Tax.

1.9.5

  • Compatible with WooCommerce Lowest Price by Igor Kovačić and Media X (Borko Livić): one sidrena line, placed above the 30-day lowest price.

1.9.4

  • English readme for the WordPress.org Plugin Directory.
  • CSV export no longer uses direct fclose() on php://output.

1.9.3

  • Prefix and tooltip are translated per language (WPML, Polylang, TranslatePress, Loco).
  • Tooltip switch, on by default.
  • Automatic display switch; when off, only the shortcode remains.

1.9.2

  • Admin REST/AJAX no longer triggers public XML generation or a permalink flush.
  • Date format: Prefix (date) or Prefix date. The word “na” belongs in the prefix, not as a separate option.

1.9.1

  • Prefix preview in settings updates immediately when the date format changes.

1.9.0

  • Sidrena price is always shown below the price; the “only on sale” option was removed.
  • Shortcode [sidrena-cijena] for product loops.

1.8.0

  • 30-day public XML archive at /arhiva-sidrene-cijene (cron at 08:00).
  • Sidrena price is no longer filled automatically when saving a product.

1.7.0

  • Public XML: “Regenerate public XML daily at 08:00” option (on by default).

1.6.1

  • Storefront format: Prefix (date) or Prefix na date.

1.6.0

  • Bulk CSV/XML import by SKU, price mapping, and AJAX progress bar.

1.5.0

  • Admin split into Settings, Import/Export, and Public XML tabs.

1.4.1

  • Storefront sidrena price uses WooCommerce tax display. If prices are entered without VAT and the shop shows prices with VAT, sidrena no longer stays as a net amount.

1.4.0

  • Prefix is text only (Sidrena cijena); the date is added from the default or the product date.

1.3.1

  • Sidrena price: 14px on desktop, 12px on mobile.

1.3.0

  • Public XML price list at /sidrena-cijena.xml, regeneration from WooCommerce Sidrena cijena.

1.2.2

  • Sidrena price is no longer bold (Elementor Product Price).

1.2.1

  • Removed the “i” icon; the tooltip stays on hover of the whole row.

1.2.0

  • Compatibility for Elementor, WPBakery, Oxygen, Divi, Bricks, Beaver, Avada, Woodmart, Flatsome, JetWooBuilder, and Woo blocks.

1.1.1

  • Sidrena price also shows in the Elementor Product Price widget.

1.1.0

  • Price list and audit export (CSV/XML) in settings.
  • CJM switch and prefix suffix on products.
  • Universal display hook next to WooCommerce blocks.

1.0.0

  • First release.