{"id":380988,"date":"2026-10-09T08:37:18","date_gmt":"2026-10-09T08:37:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/web-studio-sime-sidrena-cijena-hr-web\/"},"modified":"2026-10-09T21:29:02","modified_gmt":"2026-10-09T21:29:02","slug":"web-studio-sime-sidrena-cijena-hr-web","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/web-studio-sime-sidrena-cijena-hr-web\/","author":23571057,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1.3","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"Web Studio \u0160ime \u2013 Sidrena cijena HR Web","header_author":"Web Studio \u0160ime","header_description":"Manage current and anchor prices on WordPress websites, with a public digital price list, CSV\/XML feeds and local archives.","assets_banners_color":"2c466d","last_updated":"2026-10-09 21:29:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/webstudiosime.hr\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":92,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"webstudiosime","date":"2026-10-09 08:36:44","revision":3736218},"1.1.1":{"tag":"1.1.1","author":"webstudiosime","date":"2026-10-09 21:29:02","revision":3737343}},"upgrade_notice":{"1.0.4":"<p>Keep a site backup before replacing an entire catalog. Matching items retain their IDs and history.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3736222,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3736222,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3737351,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3737351,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"sidrena-cijena-hr-web\/price":{"name":"sidrena-cijena-hr-web\/price","title":"Sidrena Cijena Hr Web Price"},"sidrena-cijena-hr-web\/catalog":{"name":"sidrena-cijena-hr-web\/catalog","title":"Sidrena Cijena Hr Web Catalog"}},"tagged_versions":["1.1.0","1.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[567,72705,285292,4959,748],"plugin_category":[],"plugin_contributors":[284055],"plugin_business_model":[],"class_list":["post-380988","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-csv","plugin_tags-price-list","plugin_tags-reference-prices","plugin_tags-services","plugin_tags-xml","plugin_contributors-webstudiosime","plugin_committers-webstudiosime"],"banners":{"banner":"https:\/\/ps.w.org\/web-studio-sime-sidrena-cijena-hr-web\/assets\/banner-772x250.png?rev=3737351","banner_2x":"https:\/\/ps.w.org\/web-studio-sime-sidrena-cijena-hr-web\/assets\/banner-1544x500.png?rev=3737351","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/web-studio-sime-sidrena-cijena-hr-web\/assets\/icon-128x128.png?rev=3736222","icon_2x":"https:\/\/ps.w.org\/web-studio-sime-sidrena-cijena-hr-web\/assets\/icon-256x256.png?rev=3736222","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Sidrena cijena HR Web maintains an independent WordPress price list for service businesses and ordinary websites. WooCommerce is not required.<\/p>\n\n<ul>\n<li>Enter services and products manually or through the existing quick-entry form.<\/li>\n<li>Store current prices, anchor\/reference prices, dates, categories and optional descriptions.<\/li>\n<li>Display individual prices with [sidrena_cijena_hr_web] and a theme-aware list with [sidrena_cjenik_hr_web]. Dynamic editor blocks provide the same core display.<\/li>\n<li>Publish a separate Digital price list page, public CSV\/XML feeds and public REST data.<\/li>\n<li>Keep dated CSV\/XML archive pairs with a configurable retention period (35 days by default).<\/li>\n<li>Track the existing product price history and show an available 30-day minimum for special-sale products. Missing pre-installation history is not invented.<\/li>\n<li>Import comma, semicolon or tab-delimited CSV. Update matching items, create new items or explicitly replace the published catalog.<\/li>\n<li>Use the bundled starter XLSX templates to prepare a CSV manually. The FREE plugin does not import XLSX or generate premium XLSX\/PDF reports.<\/li>\n<li>Use Croatian or English plugin UI without translating user-entered business data.<\/li>\n<\/ul>\n\n<p>This is a technical tool to help manage and display price information. It is not legal advice or a guarantee of compliance. Users remain responsible for the correctness of their data and applicable rules.<\/p>\n\n<h4>Storage and reliability<\/h4>\n\n<p>Data is stored in this plugin's private WordPress post type and post metadata. No WooCommerce data model is required. Public feeds include only published entries without passwords.<\/p>\n\n<p>CSV text uses a zero-width guard for formula-sensitive values and escapes existing guards. Logical REST\/XML values remain unchanged. When reimporting this plugin's protected CSV, select the explicit codec checkbox. Ordinary CSV values are imported literally. Spreadsheet applications may infer numeric barcodes; select a text column when preserving leading zeros in a spreadsheet.<\/p>\n\n<p>Imports support up to 5 MB and 2000 items per request. All rows are checked before writes. Safe imports require InnoDB posts, postmeta and options tables. The synchronous request uses a database transaction and a private recovery record; a detected error rolls back catalog changes. Automatic database reconnection is disabled during writes so a lost connection cannot replay a write outside the transaction. Custom database-router drop-ins are not supported for imports. Completion is stored in the same transaction as the items; resubmitting the latest identical CSV\/mode by the same administrator returns that confirmation without applying it twice if the catalog still matches the saved completed result. After a lost response, retry that same input before starting a different import. Third-party hook side effects are not database-transactional. This is not a batch job or an interactive rollback editor.<\/p>\n\n<p>Local file mutexes protect snapshot generation and imports. Validated archive pairs are indexed only after both files are published. New archive pairs and temporary candidates use durable storage outside the HTTP document root. Hosting must permit the PHP user to create and write a private sibling directory; otherwise archiving returns an error and preserves the last valid pair. Abrupt termination can leave private unindexed files, which are never adopted or exposed through the archive handler. Verified legacy indexed pairs retain their names, hashes and public URLs; owned incomplete legacy files are quarantined during migration. Public feeds still come from the current logical dataset. Archive download buttons return the last valid stored version as an XML\/CSV attachment; LIVE links remain current and inline. Failed generation returns an error rather than a partial success. See docs\/EXECUTION-CONTRACT.md for the storage and execution contract.<\/p>\n\n<p>The locking model assumes one shared local filesystem and one primary database. Multi-host\/NFS locks, database replicas and persistent object caches have not been certified. Imports are serialized against other imports; unrelated manual or third-party writes are not a global transaction lock.<\/p>\n\n<p>WP-Cron checks the catalog at the configured local time and queues changes. WordPress cron depends on traffic or a server cron invoking it. A failed archive operation is shown to administrators and a local retry is queued. No external monitor is included.<\/p>\n\n<h4>Privacy and external services<\/h4>\n\n<p>The FREE plugin makes no remote HTTP requests, sends no telemetry and requires no account or license. It does not send email automatically. Public price-list routes intentionally disclose configured business identity and published price information.<\/p>\n\n<p>Optional links to Web Studio \u0160ime open only when a user clicks them. The separate WEB PRO extension may add commercial features; FREE works independently. PRO code and licensing are not bundled here.<\/p>\n\n<h4>Uninstall<\/h4>\n\n<p>Removing the plugin preserves user-entered items, settings, price history, import recovery evidence and archived price lists so that reinstalling can retain them. It removes cron events, operational cache\/transients, safe temporary files and inactive mutex files. Active locks and symlink targets are not deleted. Intentional deletion of retained business data is not performed automatically.<\/p>\n\n<h4>Private-package migration<\/h4>\n\n<p>The official folder\/text domain is web-studio-sime-sidrena-cijena-hr-web. For a privately installed 1.0.4 package in sidrena-cijena-hr-web, deactivate the old copy first, then install\/activate this official package. Do not activate both copies together. Existing options, items, history, shortcodes, blocks, public URLs and upload archive directories retain their identifiers. Keep the old folder inactive until verifying the migration. Future directory updates use the official folder.<\/p>\n\n<h3>Support<\/h3>\n\n<p>Open Help \/ guide in the plugin administration. Technical support: podrska@webstudiosime.hr.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP through Plugins &gt; Add New &gt; Upload Plugin and activate it.<\/li>\n<li>Open Sidrena cijena HR Web and complete initial business\/object setup.<\/li>\n<li>Add items or import CSV; choose replacement only when the supplied CSV is the intended complete price list.<\/li>\n<li>Add a shortcode or a dynamic block to an existing page. The separate public page defaults to \/digitalni-cjenik\/.<\/li>\n<li>Review the Digital price list tab, public links and scheduled archive status.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20require%20woocommerce%3F\"><h3>Does it require WooCommerce?<\/h3><\/dt>\n<dd><p>No. It maintains its own dataset and works on a clean WordPress installation.<\/p><\/dd>\n<dt id=\"does%20activating%20it%20guarantee%20legal%20compliance%3F\"><h3>Does activating it guarantee legal compliance?<\/h3><\/dt>\n<dd><p>No. It helps manage price information. Verify applicable requirements and the accuracy of reference prices yourself.<\/p><\/dd>\n<dt id=\"what%20remains%20free%3F\"><h3>What remains FREE?<\/h3><\/dt>\n<dd><p>Manual\/quick entry, CSV import, core price display, CSV\/XML\/REST feeds, basic archives and existing price-history behavior. Advanced designers, reports and premium convenience features belong to a separate extension.<\/p><\/dd>\n<dt id=\"are%20service%20billing%20units%20exported%20as%20a%20new%20public%20column%3F\"><h3>Are service billing units exported as a new public column?<\/h3><\/dt>\n<dd><p>No. Existing service units are used for visual display. The stable 16-column CSV\/XML contract is retained.<\/p><\/dd>\n<dt id=\"can%20i%20recover%20from%20a%20failed%20import%3F\"><h3>Can I recover from a failed import?<\/h3><\/dt>\n<dd><p>The synchronous import rolls back its database changes on a detected error. A private full pre-import record is retained. There is no new interactive rollback feature in FREE. Back up the site before intentional complete replacement; replacement removes published entries absent from the input.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Improved service-change archiving.<\/li>\n<li>Reliable automatic execution tracking.<\/li>\n<li>Improved daily product verification.<\/li>\n<li>Safer temporary archive handling.<\/li>\n<li>Corrected XML\/CSV archive download behavior.<\/li>\n<li>Cron retry and diagnostic improvements.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Hardened snapshot publication, owner-held filesystem mutexes and safe operational cleanup.<\/li>\n<li>Added preflight validation and transactional CSV imports with private recovery evidence.<\/li>\n<li>Added formula-safe CSV encoding with explicit protected-export reimport.<\/li>\n<li>Converted the existing HR\/EN UI to native WordPress gettext.<\/li>\n<li>Fixed block-theme catalog integration and accessible table\/form labels.<\/li>\n<li>Preserved the existing public schema, routes, independent dataset and FREE display.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added complete replacement\/synchronization imports with duplicate preflight and stable matching IDs\/history.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added explicit introduction-after-reference-date fields and improved theme container compatibility.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added optional visual service billing units and matching CSV starter-template aliases without changing the public feed schema.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Hardened public routes and caching; excluded unpublished and password-protected items.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial stable independent WEB price-list release.<\/li>\n<\/ul>\n\n<h4>Earlier beta releases<\/h4>\n\n<ul>\n<li>Established the neutral theme-aware shortcode, virtual catalog route, descriptions, 30-day price history, setup, extension hooks and optional PRO overview.<\/li>\n<\/ul>","raw_excerpt":"Manage service and product price information on WordPress sites without WooCommerce, with public CSV\/XML feeds and a responsive price list.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380988"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webstudiosime"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380988"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380988"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380988"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380988"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380988"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}