=== ShopBoost – WooCommerce Toolkit ===
Contributors: wpsupporting
Donate link: https://paypal.me/gdimitrovbg
Tags: woocommerce, minimum order, bulk edit, redirect, woocommerce checkout
Requires at least: 6.1
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.8.9
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

20+ WooCommerce tools in one plugin: minimum order, bulk edit, promotions, price history, EUR/BGN, checkout fields, withdrawal, photo uploads.

== Description ==

**ShopBoost** is an all-in-one WooCommerce toolkit — **20+ tools in a single plugin** that replaces a drawer full of single-purpose add-ons. Every feature has its own settings page and its own on/off switch, and a disabled feature registers **zero** hooks, so you only ever run the code you actually use.

Grow average order value, streamline checkout, stay compliant with EU rules, watch your server load, and keep your catalogue tidy — all from one clean, fast admin.

**Turn features on from a single screen:** the General Functions page saves the moment you flip a switch (no Save button), with a search box and Enabled / Disabled / Coming-soon filters to navigate the list at a glance.

= 🛒 Minimum Order Amount =
Require a minimum cart total before checkout. A customisable notice in the cart and/or at checkout with dynamic placeholders (`{minimum_amount}`, `{current_amount}`, `{remaining_amount}`), multiple display locations, and full visual control (colours, font, size) with live preview.

= 🔗 Direct Checkout Links (Product Links) =
Generate direct-to-checkout links for any product. One click adds the product and takes the customer straight to checkout — perfect for promotions, email campaigns and social media. Full variable-product support with a variation popup.

= ➕ Auto Add Product =
Automatically add a free gift, sample or promo product when the cart reaches a set amount. Multiple products with individual thresholds, discount options (percentage, fixed, or set price), and automatic removal when the cart drops back below the threshold.

= 🎁 Buy X Get Y Free =
Run "buy X, get Y free" promotions, targeting whole categories or individual products.

= ⚡ Quick Order =
Add a one-step quick-order form to any product via shortcode or a modal — name, phone and your own custom fields. Submissions are stored and emailed, so customers can order without going through the full checkout.

= 📸 Product Photo Upload =
Let customers attach a photo to a product — for printing, engraving or photo gifts. Turn it on per product (optionally required); the image is validated, saved with the order with a download link, and shown in the order email. Choose the accepted formats, size limit and accent colour, reword every customer-facing text, and set different wording per language. Uploads go through WordPress's own upload API, stored under a random name in a folder that refuses script execution, size-capped and rate-limited.

= ↩️ Right of Withdrawal =
A compliant tool for the 14-day EU / Bulgarian distance-selling right of withdrawal. The customer looks an order up by its number and the email used at checkout (works for guests), chooses which items and quantities to return, and confirms in a separate step. The declaration is recorded on the order (banner, per-line column and a status badge), both sides are emailed, and nothing is refunded automatically — returning money stays a deliberate action in WooCommerce. The public lookup is deliberately unhelpful to strangers (one identical message for every failure, per-IP rate limiting). Works via the `[flexmior_withdrawal]` shortcode, a My Account button and a link in order emails.

= 🏷️ Mass Discount =
Run named promotions: pick the products, set a percentage and optional start/end dates, and the discount applies as a real WooCommerce sale price. A live panel lists every campaign with a product count; original prices are backed up automatically, so a promotion (or a whole category) can be rolled back in one click. A product can only be in one promotion at a time, so an existing discount is never silently replaced.

= 🛍️ Bulk Edit Products =
Edit prices and stock across your whole catalogue from one table. Change names, slugs and SKUs inline, and apply permanent price/stock changes to selected products at once. Full variable-product support. (Promotions with a sale badge live in Mass Discount.)

= 📊 Price Variation Display =
Show all variation prices in a structured table or visual layout on the product page — no clicking through dropdowns. Five templates (Table, Cards, Badges, Pills, Checkbox) with customisable colours, sizes and highlights.

= 📉 Price Tracking + EU Omnibus =
Record every price change and show the history on the product page (a tab and the `[flexmior_price_history]` shortcode) with an inline chart and current / lowest / highest / average stats. Displays the EU **Omnibus** "lowest price in the last 30 days" badge on sale items (legally required in the EU), and lets customers subscribe to a **price-drop email alert**. Target all products, categories or specific products.

= 💱 Secondary Currency (EUR / BGN and more) =
Show one or more secondary currencies next to every price — listings, variable ranges, cart, mini-cart, order totals, My Account and emails. Works with any store currency at your own rate. The **BGN ↔ EUR** pair is locked to the official fixed rate (1 EUR = 1.95583 лв.) set by EU law for Bulgaria's eurozone accession. Configurable format (brackets or slash) and position.

= 📏 Size Chart (Beta) =
Add a size guide to any product — as a product tab, a shortcode or a popup. A fully visual editor (add/remove rows and columns, enter measurements). Assign per product, per category or globally.

= 📝 Checkout Field Editor =
Add custom checkout fields (text, number, checkbox, select, textarea), show or hide default WooCommerce fields, and reorder by drag-and-drop. Field data is saved to the order and shown in the admin and in transactional emails.

= 🚚 Conditional Free Shipping =
Automatically hide specific shipping methods when certain products are in the cart — for example, hide "Free Shipping" when a heavy item is added. ANY and ALL matching modes.

= 🔤 URL Transliteration =
Automatically convert Cyrillic characters in product, category and post slugs to Latin on save — essential SEO for Bulgarian-language stores — plus a manual tool for converting any text.

= 🔄 Redirect Manager =
Create and manage 301, 302 and 410 redirects from the admin — no `.htaccess` editing. A clean table to create, edit, enable/disable and delete rules; ideal for product URL changes, seasonal campaigns and broken links without losing SEO value.

= 📧 Email Capture =
Collect email addresses from the `[flexmior_subscribe]` form, price-drop alerts, Quick Order and the Advent Calendar, and forward them to **Mailchimp, Brevo, MailerLite or Klaviyo** — with a one-click link to each service's API-key screen. Every address is stored locally first and synced on a schedule, so a slow or failing provider never delays the customer and nothing is lost in an outage. Each source has its own opt-in.

= 🎄 Advent Calendar (Beta) =
A countdown calendar of daily surprises via the `[flexmior_advent_calendar]` shortcode — put a coupon, a featured product or a message behind each door. Optional streak bonuses and an email gate.

= 🩺 Health & Load Guard =
A built-in server-load monitor. See what every request costs — time, peak memory, database queries and external calls — and, where it can be measured safely, which plugin is responsible. A live toolbar indicator and a 24-hour dashboard, thresholds that warn you before a "503 – maximum processes reached" outage, and an optional safety net that can disable and quarantine a sustained culprit automatically, with a recovery must-use plugin that stops a crashing plugin from loading on the next request.

= 🧪 Product Generator =
Generate test products in bulk — categories, tags, prices and descriptions — for staging and theme testing.

= ⚡ Performance First =
Every feature is fully gated behind its toggle: a disabled feature registers zero hooks, so WordPress never even loops through them. Admin assets load only on plugin pages; front-end CSS loads only on WooCommerce pages.

= 🔒 Security =
Built to WordPress standards: nonce verification on every form and AJAX request, capability checks, prepared SQL, sanitised inputs and escaped outputs throughout. Customer file uploads are validated by extension, real MIME and image decode, stored under random names in a non-executable folder, size-capped and rate-limited.

= Theme Compatibility =
Works with any theme that follows WooCommerce standards, and declares compatibility with WooCommerce **HPOS**. Includes dedicated integration layers for **Woodmart** (AJAX cart + dark mode), **Divi**, and **WooCommerce Blocks** (Gutenberg checkout).

= Translations =
Ships with English, Bulgarian (bg_BG), German (de_DE), Spanish (es_ES) and Greek (el_GR); customer-facing strings are fully translatable.

== Installation ==

1. Make sure WooCommerce is installed and activated.
2. Install ShopBoost from the WordPress plugin directory, or upload the ZIP via **Plugins → Add New → Upload Plugin**.
3. Activate the plugin.
4. Go to **ShopBoost** in your WordPress admin menu.
5. Enable the features you need from the **General Functions** page and configure each one from its own settings page.

== Frequently Asked Questions ==

= Do I need to enable all features? =
No. Every feature has its own toggle on the General Functions page. Enable only what you need — disabled features register zero code and have no performance impact.

= Is it compatible with WooCommerce HPOS? =
Yes. ShopBoost fully supports WooCommerce High-Performance Order Storage (HPOS). Custom checkout fields use the Order CRUD API.

= Will it work with my theme? =
Yes. ShopBoost uses standard WooCommerce hooks and works with any properly coded theme. Dedicated integration layers are included for Woodmart, Divi, and Gutenberg Blocks.

= Is the BGN/EUR conversion rate configurable? =
No — and intentionally so. The rate of 1 EUR = 1.95583 лв. is fixed by EU law for Bulgaria's eurozone accession and cannot legally be changed. ShopBoost uses this rate exclusively.

= Can I customise the minimum order notice appearance? =
Yes. The Minimum Order settings page provides full visual control: text colour, background colour, border colour, highlight colours for each placeholder, font family, size, and weight — all with a live preview.

= Does the right-of-withdrawal tool refund customers automatically? =
No. It records the customer's declaration and notifies both sides; issuing the refund stays a deliberate action you take in WooCommerce. The public lookup never reveals other customers' orders — a wrong email, a non-existent order and an expired window all return the same message, and attempts are rate-limited per IP.

= Are customer photo uploads safe? =
Yes. Every upload is validated three ways (extension allow-list, real MIME type, and an image decode), handled through WordPress's own upload API, stored under a random filename in a folder that blocks directory listing and script execution, size-capped, and rate-limited. Only JPG, PNG, GIF and WebP are accepted (no SVG). You choose which formats and the size limit.

= Does it work with caching plugins? =
Yes. ShopBoost is compatible with all major caching plugins including WP Rocket, W3 Total Cache, LiteSpeed Cache, and WP Super Cache.

= Where can I get support? =
Visit [wpsupporting.com/support](https://wpsupporting.com/support) to open a support ticket. Free registration is required.

== Screenshots ==

1. General Functions – overview of all available features with enable/disable toggles for each module (Minimum Order, Product Links, Auto Add Product, URL Transliteration, Redirect, Checkout Field Editor, Price Variation, Size Chart, Conditional Free Shipping, BGN ↔ EUR and more).
2. Bulk Edit Products – manage prices and stock across all products in a table view. Apply mass discounts (percentage, fixed amount, or set price) with automatic backup and one-click restore of original prices. Supports variable products with SKU and stock columns.
3. Redirect Manager – create and manage 301/302/410 redirects directly from the admin panel without touching .htaccess. Includes SEO benefits overview (preserve link equity, fix broken links, manage product URL changes).
4. BGN ↔ EUR Dual Currency – configure where the secondary currency is displayed (product prices, cart, order totals, mini-cart, emails) and choose the display format (brackets or slash) with live preview. Uses the official fixed ECB rate (1 EUR = 1.95583 лв.).

== Changelog ==

= 1.8.9 =
* **New – Plugin admin language:** pick the language the plugin's own admin screens are shown in — English, Български, Deutsch, Ελληνικά or Español — from a dropdown on the General Functions page. It is independent of your site language, so you can run a Bulgarian store and keep the plugin's admin in English, or the other way round. The storefront always follows the site language.
* **New – Full translations:** the whole plugin is now translated into Bulgarian, German, Greek and Spanish, admin and customer-facing alike. WordPress still loads the matching translation automatically for your site language; the picker above is only for overriding the admin.

= 1.8.8 =
* **Performance – the plugin loads only the code a page actually needs:** feature files are now pulled in on demand rather than all at once, so a typical front-end request loads far fewer of them and the site stays lighter. No setting or behaviour changes.
* **Maintenance – cleaner internal structure:** Minimum Order, Direct Checkout Links and URL Transliteration each moved into their own self-contained module, and unused transliteration code was removed. This is groundwork for faster, safer updates and changes nothing you can see.
* **Fix – the "Coming soon" feature cards showed a broken icon:** the placeholder icon was stored with a character-encoding glitch and rendered as stray symbols; it now shows correctly.

= 1.8.7 =
* **New – Right of withdrawal ("Withdrawal from contract"):** A compliant way for a customer to exercise the 14-day EU/Bulgarian distance-selling right of withdrawal. They look an order up by its number and the email used at checkout (so it works for guests with no account), choose which items and quantities they are returning, and confirm in a separate step. The declaration is recorded on the order (a red banner, a per-line "withdrawn" column and an orders-list badge), both sides are emailed, and nothing is refunded automatically — returning money stays a deliberate action in WooCommerce. The public lookup is deliberately unhelpful to strangers: one identical message for every failure and per-IP rate limiting, so no one can probe which orders exist. Shown via the `[flexmior_withdrawal]` shortcode, an optional My Account button and a link in order emails; each entry point has its own toggle.
* **New – Product Photo Upload:** Let customers attach a photo to a product — for printing, engraving or photo gifts. Turn it on per product (optionally required); the image is validated, saved with the order with a download link for you, and shown in the order email. Pick the accepted formats (JPG, PNG, GIF, WebP), the size limit and an accent colour, reword every customer-facing text, and set different wording per language. Uploads are handled through WordPress's own upload API, stored under a random name in a folder that refuses script execution, size-capped and rate-limited.
* **Change – Advent Calendar is now available as Beta:** the daily-surprise calendar (the `[flexmior_advent_calendar]` shortcode) is unlocked and can be switched on; it is off by default while it settles in.
* **Change – General Functions page:** features now save the moment you flip a switch — the Save button is gone — and a search box and All / Enabled / Disabled / Coming soon filters make the growing feature list easy to scan. Long descriptions collapse behind "Show more" so two wordy features no longer stretch the grid.
* **New – Email Capture quick links:** each mailing-list service (Mailchimp, Brevo, MailerLite, Klaviyo) now links straight to the screen where its API key and list ID live, so setup is one click away.
* **Fix – A stray arrow and notch appeared beside the Advent Calendar status:** the plugin's generic `arrow` class collided with WordPress's own admin-pointer styling, which positioned it absolutely and drew a decorative triangle. The class was renamed so it no longer inherits those styles.

= 1.8.6 =
* **Fix – Health & Load Guard measured WP-CLI commands as front-end requests:** WP-CLI runs with no memory limit and is meant to run long, so an import, a `wp cron` batch or a backup was logged as a multi-second, thousands-of-query "front request". That skewed the dashboard averages and could raise slow/query warnings against a plugin — in automatic mode a nightly batch job could have disabled one. WP-CLI consumes no PHP-FPM worker, which is what the feature protects, so it is no longer measured at all.
* **Fix – Deactivating the plugin left the recovery guard running:** the must-use recovery plugin and the quarantine list survived deactivation, so a quarantined plugin could stay disabled with no interface left to release it. Deactivation now removes the recovery guard, releases the quarantine (anything it disabled simply stays normally deactivated and visible on the Plugins screen) and clears every scheduled job the plugin created.
* **New – Proper uninstall handling:** deleting the plugin now always stops its scheduled jobs, removes the recovery guard and clears its transients. A new "Delete all ShopBoost data when the plugin is deleted" option in General Functions — **off by default** — additionally removes every table, setting and stored record, so deleting and reinstalling no longer risks your redirects, checkout fields, size charts, quick orders or collected addresses unless you ask for it.

For the full version history, see changelog.txt.

== Upgrade Notice ==

= 1.8.9 =
Adds a language picker for the plugin's admin screens and full Bulgarian, German, Greek and Spanish translations. All existing settings and behaviour are preserved.

= 1.8.8 =
Performance and maintenance release: the plugin now loads only the code each page needs, and several features moved into their own modules. All existing settings and behaviour are preserved.

= 1.8.7 =
Adds a right-of-withdrawal tool, customer photo uploads on products, and releases the Advent Calendar as Beta. The General Functions page now auto-saves and has search and filters. All existing settings are preserved.

= 1.8.1 =
Fixes admin screens overflowing the right edge. Promotions now live only in Mass Discount, with protection against double-discounting and one-click removal of a whole promotion or category. Also fixes unrounded percentage prices and several Price Tracking issues. Existing settings are preserved.

= 1.8.0 =
New Price Tracking feature: price-history chart (tab + shortcode), EU Omnibus 30-day lowest-price badge, and price-drop email alerts for customers. All existing settings are preserved.

= 1.7.6 =
Buy X Get Y Free can now target individual products, not just whole categories. All existing settings are preserved.

= 1.7.5 =
New Buy X Get Y Free feature and a redesigned Secondary Currency module (multiple currencies + custom rates, any store currency). Internal per-feature refactor and a Bulk Edit price-cache fix. All existing settings are preserved.

= 1.5.2 =
New Conditional Free Shipping custom checkout text option for uncalculated shipping labels, plus minor bug fixes for better stability.

= 1.5.1 =
Bulk Edit: product images, per-page filter, admin bar menu, mass discount with save/restore, full variation support. File cleanup for WordPress compliance.

= 1.5.0 =
Major update! Added Size Chart (Beta) and Bulk Edit Products features. Performance optimizations: frontend CSS loads only where needed, faster admin loading. Plugin tested with WordPress 6.9.

= 1.4 =
Major improvements release! Enhanced Checkout Field Editor and Redirect features with improved interfaces, fixed drag and drop functionality, and strengthened security. All existing settings remain unchanged.

= 1.3.3 =
Design update release! Redesigned General Functions page with modern card-based interface, added feature toggle system, and introduced 6 new "Coming Soon" features. Updated plugin icons and improved overall admin experience. All existing settings remain unchanged.

= 1.3.2 =
New feature release! Added Woodmart theme integration with AJAX cart support, mini cart widget message, and dark mode support. Also includes protection against duplicate plugin loading.

= 1.3.1 =
Bug fix release! Fixed critical issue with Gutenberg/Blocks integration where HTML tags were displaying as plain text. Also fixed syntax errors and improved security. All existing settings remain unchanged.

= 1.3.0 =
Major feature release! Added Auto Add Product functionality with support for multiple products, discount options, and automatic product management. The "Enable direct checkout links" option has been moved to the Product Links page. All existing settings remain unchanged.

= 1.2 =
New feature release! Added Product Links functionality for generating direct checkout links, variation selection popup, and improved admin interface. All existing settings remain unchanged.

= 1.0.1 =
Major update with improved security, better code organization, and WordPress.org compliance. All existing settings will be automatically migrated.

== Support ==

For support, feature requests, or bug reports, please visit our support page at https://wpsupporting.com/support/

== Privacy Policy ==

This plugin does not collect, store, or transmit any personal data. It only uses WordPress and WooCommerce standard functionality to enforce minimum order amounts.

== Credits ==

Developed by wpsupporting - https://wpsupporting.com

Special thanks to the WordPress and WooCommerce communities for their excellent documentation and support.