🇸🇰 Slovenský popis
Tento plugin pridáva do vášho WooCommerce e-shopu
online formuláre na odstúpenie od zmluvy a reklamácie, plne v súlade s európskou Smernicou EÚ 2023/2673 a slovenským zákonom č. 108/2024 Z. z. o ochrane spotrebiteľa.
Pre koho je to určené:
Pre slovenských prevádzkovateľov WooCommerce e-shopov, ktorí potrebujú:
- Splniť zákonnú povinnosť podľa EÚ smernice 2023/2673 (účinná od 19. 6. 2026), ktorá vyžaduje aby každý e-shop mal funkciu „Odstúpiť od zmluvy tu" priamo na webe (nie len PDF na stiahnutie).
- Zjednodušiť proces reklamácií — zákazník vyplní reklamáciu online, nemusí tlačiť papierový formulár, môže priložiť fotografie vady.
- Mať poriadok v reklamáciách — všetky odoslané reklamácie sa zhromaždia v administračnom rozhraní, kde môžete vyplniť reklamačný protokol, sledovať stav a vytlačiť oficiálny dokument.
Hlavné funkcie:
- Odstúpenie od zmluvy — formulár cez shortcode
[withdrawal_form], tlačidlo „Odstúpiť od zmluvy tu" pri každej objednávke v Mojom účte, automatická kontrola 14-dňovej lehoty (po vypršaní sa tlačidlo skryje), HTML potvrdenie s presným dátumom a časom odoslania (zákonný dôkaz na trvalom nosiči).
- Reklamácie — kompletný online reklamačný formulár cez shortcode
[complaint_form] (alias [reklamacia]), všetky polia zo štandardného slovenského papierového formulára: meno/firma, telefón, e-mail, IBAN, výrobca, model, výrobné číslo, dátum predaja, číslo objednávky/faktúry, popis vady. Voliteľné nahrávanie fotografií vady (drag & drop, JPG/PNG/WEBP/HEIC, do 5 MB).
- Reklamačný protokol — admin vyplní rozhodnutie (výmena/vrátenie ceny/zamietnutie), dátumy, IBAN na vrátenie. Vytlačiteľný A4 protokol (browser-natívne uloženie do PDF), pripravený na archiváciu.
- 30-dňová zákonná lehota — plugin posiela 5 dní pred uplynutím automatickú pripomienku adminovi (cez WP Cron). Žiadna pokuta od ÚZP za zameškané reklamácie.
- Údaje predávajúceho — vyplníte IČO, DIČ, IČ DPH a adresu raz, zobrazuje sa v hlavičke formulárov aj na tlačenom protokole. Berie sa primárne z WooCommerce → Nastavenia → Všeobecné, voliteľný override.
- Plne preložené do slovenčiny — formuláre aj admin rozhranie.
Čo plugin NEROBÍ:
- Automatické refundy ani zmenu stavu objednávky vo WooCommerce
- Generovanie dobropisov alebo vratových štítkov
- Napojenie na dopravcov
- Výnimky z práva na odstúpenie (digitálny obsah, hygienický tovar atď.)
Tieto kroky rieši prevádzkovateľ manuálne podľa svojich obchodných podmienok.
Inštalácia v 3 krokoch:
- Aktivujte plugin
- Vytvorte 2 stránky a vložte do nich shortcode
[withdrawal_form] a [complaint_form]
- V Spotrebiteľské práva → Nastavenia zadajte URL týchto stránok + vyplňte IČO/DIČ ak ste firma
🇬🇧 English description
This plugin adds online forms for both
withdrawal from contract and
complaints (reklamácie) to your WooCommerce store, fully compliant with EU Directive 2023/2673 and Slovak Act No. 108/2024 Coll. on consumer protection.
Withdrawal from contract
- Shortcode
[withdrawal_form] — embeddable on any page
- "Withdraw from contract here" button on every order in My Account (hides after 14 days)
- Automatic 14-day withdrawal-period check — visual and server-side blocking after expiry
- Automatic form pre-fill for logged-in customers
- Order ownership verification: e-mail or postcode for guest checkouts
- HTML confirmation e-mail with submission date and time (legal proof on a durable medium)
- HTML notification e-mail to the shop owner — supports multiple recipients (comma-separated)
- Rate limiting — max 10 attempts per hour per IP (admins bypass)
- Legally exact button wording per Articles 1 and 3 of the directive
Complaints (reklamácie)
- Shortcode
[complaint_form] (alias [reklamacia])
- All fields matching the standard Slovak complaint form: buyer details, IBAN, brand, model, serial number, sale date, order number, invoice, defect description
- Brand and model are optional — focus is on the defect description
- Separate "Order number" field — auto-filled from order dropdown for logged-in customers, manual text input for guests
- Optional photo upload with drag & drop (up to 5 photos by default, configurable)
- Secure photo handling — real MIME-type verification (JPG, PNG, WEBP, HEIC), .htaccess protection, random filename hash, realpath safety check
- Auto-fill from order selection for logged-in customers (brand, model, sale date, order number, invoice number)
- Admin complaint list with filter (by status), search (name, e-mail, invoice, order number, ID) and pagination
- Admin "Reklamačný protokol" form — fill resolution (exchange / refund / rejected), expert assessment contact, dates
- Status pipeline: New → In progress → Resolved / Rejected (coloured badges)
- "Date resolved" is required when closing a complaint (auto-fills today if empty)
- Internal notes field (private) — visible only to admins, NOT included in print or customer e-mails
- Delete action with confirmation and disk cleanup of attached photos
- Optional status update e-mail to customer
- Printable A4 view — buyer-filled form + protocol on one page (browser-native print to PDF)
- Seller info settings — IČO, DIČ, IČ DPH, correspondence address (hybrid: WC Store Address + plugin overrides)
- WP Cron daily reminder e-mail to admin 5 days before the 30-day legal deadline expires (each complaint reminded only once)
- 30-day legal deadline reminder per Act No. 108/2024 Coll.
Common features
- Dedicated top-level admin menu "Spotrebiteľské práva" (Consumer Rights) with 3 clean submenus: Withdrawals from contract, Complaints, Settings
- Database log of all submissions (separate tables for withdrawals and complaints)
- Full multilingual support (EN, SK, CS, HU, DE, PL) — auto-detected from WordPress Site Language
- HPOS and legacy WooCommerce compatibility
- WordPress Privacy Policy integration in GDPR consent
- Automatic DB schema upgrades — new columns are added on plugin load if missing (no manual SQL needed)
WooCommerce compatibility
The plugin works with both order-storage systems:
- HPOS (High Performance Order Storage) — new
wc_orders tables, WooCommerce 7.1+
- Legacy — classic storage via WordPress posts/postmeta
Switching is fully automatic. HPOS compatibility is declared via
FeaturesUtil — the plugin shows a green compatibility badge in WooCommerce > Settings > Advanced.
Legislation
The plugin is designed in compliance with:
- EU Directive 2023/2673 (effective 19 June 2026)
- Slovak Act No. 108/2024 Coll. on consumer protection (replaced Act No. 102/2014 Coll. effective 1 July 2024)
What the plugin does NOT do
- Exceptions from the right of withdrawal (digital content, hygiene goods, etc.)
- Automatic refunds or order status changes in WooCommerce
- Generating credit notes or return labels
- Carrier integration
These steps are handled by the shop owner manually according to their terms and conditions.
Usage
Withdrawal from contract:
- Create a page and insert the shortcode
[withdrawal_form]
- In Consumer Rights → Settings, enter the URL of that page
- Add a link to that page in your site footer
Complaints (reklamácie):
- Create a separate page and insert the shortcode
[complaint_form]
- In Consumer Rights → Settings, enter the URL of that page
- Fill in the Seller info section (IČO/DIČ if applicable) — these details appear on the printed protocol
2.0.0
Major release — full complaint (reklamácia) functionality, dedicated admin menu, brand redesign.
Withdrawal form:
- Added:
wc-pending (Awaiting payment) orders are now also shown in the withdrawal form order dropdown. Previously only completed / processing / on-hold orders appeared, which broke for shops with custom statuses or workflows where orders stay in pending state.
- Added: new filter hook
oodz_withdrawal_order_statuses — themes/plugins can customize which statuses appear in the dropdown (e.g. add custom statuses, remove unwanted ones).
Plugin renamed to "Spotrebiteľské práva pre WooCommerce" (Consumer Rights for WooCommerce) — now covers both withdrawal from contract AND complaints under a single product.
Complaints (reklamácie) — entirely new functionality:
- New shortcode
[complaint_form] (alias [reklamacia]) for the online complaint form.
- All fields matching the standard Slovak paper complaint form: buyer details (name, phone, e-mail, IBAN), product details (brand, model, serial, sale date, order number, invoice), defect description.
- Brand and model are optional — many products do not have a clear manufacturer label and the description of defect is what really matters.
- Separate "Order number" field on the complaint form. For logged-in customers with orders, the order dropdown writes the order number to a hidden input (no duplicate visible field). For guests (and logged-in users without orders), a visible "Order number" text input is shown.
- Optional photo upload of the defect (up to 5 photos, 5 MB each by default — configurable in settings).
- Drag & drop photo upload with live preview, file size info, and per-photo remove buttons.
- Secure photo handling —
wp_handle_upload() with real MIME-type verification (JPG, PNG, WEBP, HEIC), random hash prefix on filenames, .htaccess protection against PHP execution, realpath safety check before any deletion.
- Photo files stored in
/wp-content/uploads/oodz-reklamacie/YYYY/MM/.
- New DB table
wp_oodz_reklamacie (21 columns + 3 indexes) — auto-created on plugin load via versioned upgrade routine.
- Rate limiting (max 3 complaint submissions per hour per IP) — anti-spam.
Admin — complaint management:
- Dedicated top-level admin menu "Spotrebiteľské práva" (Consumer Rights) with shield icon — replaces the previous scattered submenu items under WooCommerce. Three clean submenus: Withdrawals from contract, Complaints (reklamácie), Settings.
- Complaint list page with filter (by status), search (name, e-mail, invoice number, order number, complaint ID), pagination (20 / 50 / 100 / 200 per page).
- Complaint detail page split in two columns: Part 1 — buyer-filled data (read-only) and Part 2 — Reklamačný protokol form to be filled by the seller.
- Status pipeline: New → In progress → Resolved / Rejected, with coloured badges in the list.
- "Date resolved" is required when status is Resolved or Rejected — HTML5 required attribute, visual asterisk marker, JS toggles requirement on status change, plus server-side enforcement.
- Auto-fill "Date resolved" with today's date when admin closes a complaint and the field is empty.
- Internal notes field (private) — visible only to admins, NOT included in print/PDF or in customer e-mails. Yellow "PRIVATE" badge in the UI.
- Photo display: larger thumbnails (140px), photo count badge, lazy loading, fallback "No photos attached" message. Photo count column in the list with badge.
- "Delete complaint" action on both the list (row action) and the detail page (title bar). Confirmation dialog before deletion. Permanently removes the DB row and any uploaded photos from disk (with realpath safety check). Success/warning notices after deletion.
- Optional "Send status update e-mail to customer" checkbox when saving the protocol.
Print / PDF:
- Printable A4 view of the complaint form (Part 1) + Reklamačný protokol (Part 2) on one page, with the legal text on 12-month rule and expert assessment. Uses browser-native print → "Save as PDF" (no bundled PDF library).
- Seller info appears in the header of both the online form and the printed protocol.
E-mails:
- HTML confirmation e-mail to the customer with submission date/time and 30-day legal deadline note.
- HTML notification e-mail to the shop owner with photo thumbnails and a direct link to the complaint detail page.
- Status update e-mail to the customer when the admin closes the complaint (optional, sent on demand).
- WP Cron daily check sends a deadline reminder e-mail to the admin 5 days before the 30-day legal deadline (i.e. for complaints 25+ days old that are still open). Each complaint triggers only one reminder. Cron event is cleanly unscheduled on plugin deactivation.
Settings — new "Údaje predávajúceho" section (used in form header + printed protocol):
- Hybrid: company name and address come from WooCommerce → Settings → General by default; override fields in plugin settings if needed.
- Additional legal fields: Business ID (IČO), Tax ID (DIČ), VAT ID (IČ DPH), correspondence address, phone.
- New complaint-specific settings: URL of the complaint form page, max photos per complaint, max photo size in MB.
UI / readability:
- Larger, more readable font sizes across both forms — title 26px, section titles 18px, inputs 16px, labels 15px. Pixel values used instead of rem to ensure consistent appearance across themes.
- Larger radio buttons and checkboxes (20px instead of 18px).
- More generous input padding (12 / 16 px instead of 10 / 14).
- Added
tel, date, number, url input types to the styles selector — they no longer fall back to browser defaults.
Translations:
- All complaint and admin strings translated in all 6 supported languages: EN, SK, CS, HU, DE, PL.
Backward compatibility:
- Existing withdrawal-from-contract functionality is preserved without changes.
- Existing DB table
wp_oodz_log is untouched.
- All existing options remain valid.
1.7.0
- Added: support for multiple admin notification e-mails — separate addresses with a comma
- Updated: Slovak translation now references Act No. 108/2024 Coll. on consumer protection (replaced Act No. 102/2014 Coll. effective 1.7.2024)
- Updated: tested up to WordPress 7.1 and WooCommerce 9.5
- Internal: new helper methods
sanitize_emails_list() and get_admin_emails() for robust e-mail list parsing
1.6.0
- Added: admin-configurable "Custom notice / warning" field — shop owner can display product-specific warnings at the top of the form (e.g. exceptions from withdrawal right for personalized or hygiene products)
- Added: notice supports basic HTML formatting (bold, links, lists, paragraphs) and auto-paragraphing for plain text
- Added: notice text translatable in all supported languages
1.5.0
- Added: Polish (pl_PL) translation
- Added: clickable Privacy Policy link in the GDPR consent checkbox — uses WordPress native Privacy Policy page (Settings → Privacy)
- Updated: GDPR consent string in all translations (EN, SK, CS, HU, DE, PL) now contains a
%s placeholder for the privacy policy link
1.4.3
- Changed: plugin name renamed to "Odstupenie od zmluvy pre WooCommerce" (fully Slovak) — primary target market is Slovakia
1.4.2
- Fixed: included compiled .mo translation files (previously only .po source files were shipped, so translations did not actually load)
- Fixed: remaining occurrence of old shortcode reference in admin help text
1.4.1
- Added: new English shortcode
[withdrawal_form] (recommended)
- Kept: original
[odstupenie_od_zmluvy] shortcode as backward-compatible alias — existing installations are not affected
- Updated: admin texts and readme now reference the new English shortcode
1.4.0
- Added: Full multilingual support — plugin is now translatable via standard WordPress gettext system
- Added: English (en_US), Slovak (sk_SK), Czech (cs_CZ), Hungarian (hu_HU), German (de_DE) translations included
- Added: All button labels, e-mails, error messages and admin UI fully translatable
- Added: JavaScript strings localized via
wp_localize_script
- Changed: Source language changed to English (was Slovak) — required for WordPress.org translation platform
- Changed: Class strings and hardcoded labels wrapped in
__() calls
1.3.1
- Added: order-number existence check before further validation
- Added: full HPOS compatibility — works with both HPOS and legacy WC without configuration
- Added: HPOS compatibility declaration via FeaturesUtil (green badge in WC)
- Added: HPOS-native query for postcode verification (
billing_postcode column in HPOS)
- Added: helper
find_order_by_number() for standard and custom order numbering
- Fixed: missing
psc field in AJAX request (postcode fallback did not work)
- Fixed: plugin name and slug no longer contain the reserved "WC" prefix
- Fixed: class name no longer uses the
WC_ reserved prefix
- Fixed: readme rewritten in English per WP.org guidelines
- Fixed:
$_SERVER superglobals now use wp_unslash() before sanitization
- Fixed: admin log query now uses object caching
1.3.0
- Added: automatic 14-day withdrawal-period check (
date_completed or date_created)
- Added: visual deadline information in the form — green / yellow / red banner
- Added: client and server-side form blocking after expiry
- Added: days-remaining counter directly in the order dropdown
- Added: My Account button auto-hides after 14 days from delivery
1.2.0
- Added: fallback postcode verification for guest customers
- Added: contact information setting for error messages
- Added: rate limiting — max 3 attempts per hour per IP
- Fixed: IDOR vulnerability — logged-in users can only submit their own orders
- Fixed: e-mail header injection in subject line
- Fixed: button wording matches the exact text of EU Directive 2023/2673
1.1.0
- Added: "Withdraw from contract here" button in My Account > Orders
- Added: form pre-fill from URL parameter
?objednavka=NUMBER
- Added: URL setting for the form page
- Added: informational message for non-logged-in customers
1.0.0
- Initial release — shortcode, form, e-mails, DB log, admin overview, base security