=== 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: 6.9 Requires PHP: 7.4 Stable tag: 1.7.2 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html The all-in-one WooCommerce toolkit. Minimum orders, auto-add products, bulk editing, redirects, dual currency (BGN ↔ EUR), size charts, checkout fields, and more — all in one plugin. == Description == **ShopBoost** is a comprehensive WooCommerce toolkit that replaces multiple separate plugins with a single, unified solution. Every feature has its own dedicated settings page and can be enabled or disabled independently — so you only run the code you actually use. Whether you want to increase average order value, streamline your checkout, manage redirects, or display BGN/EUR prices side by side, ShopBoost has you covered — all from one clean admin interface. = 🛒 Minimum Order Amount = Set a minimum cart amount that customers must reach before completing checkout. Displays a customisable warning notice in the cart and/or at checkout. Supports dynamic placeholders (`{minimum_amount}`, `{current_amount}`, `{remaining_amount}`), multiple display locations, and full visual customisation (colours, font, size) with live preview. = 🔗 Direct Checkout Links (Product Links) = Generate direct-to-checkout links for any product. One click adds the product to the cart and takes the customer straight to checkout — perfect for promotions, email campaigns, and social media. Full support for variable products with a variation selection popup. = ➕ Auto Add Product = Automatically add a free gift, sample, or promotional product to the cart when the customer reaches a set amount. Supports multiple products with individual thresholds, discount options (percentage, fixed amount, or set price), and automatic removal when the cart drops below the threshold. = 🔄 Redirect Manager = Manage 301, 302, and 410 redirects directly from the WordPress admin — no `.htaccess` editing required. Create, edit, enable/disable, and delete redirect rules from a clean table interface. Ideal for handling product URL changes, seasonal campaigns, and fixing broken links without losing SEO value. = 📝 Checkout Field Editor = Add custom fields to the WooCommerce checkout form (text, number, checkbox, select, textarea). Show or hide default WooCommerce fields. Drag-and-drop reordering. Custom field data is saved to the order and displayed in the admin order view and transactional emails. = 💱 BGN ↔ EUR Dual Currency = Display the secondary currency equivalent next to every price in your store — product listings, variable product ranges, cart, mini-cart, order totals, My Account, and emails. Works in both directions: BGN stores show EUR, EUR stores show лв. Uses the official fixed ECB conversion rate (1 EUR = 1.95583 лв.) which is set by EU law and cannot be changed. Configurable display format (brackets or slash) and position. = 📊 Price Variation Display = Show all product variation prices in a structured table or visual layout directly on the product page — no more clicking through dropdowns. Choose from five display templates: Table, Cards, Badges, Pills, or Checkbox. Fully customisable colours, sizes, and highlight options. = 📏 Size Chart = Add a size guide to any product — displayed as a product tab, via shortcode, or as a popup button. The editor is fully visual: add and remove rows and columns, enter your measurements, and save. Can be assigned per product, per category, or globally. = 🚚 Conditional Free Shipping = Automatically hide specific shipping methods when certain products are in the cart. For example: hide "Free Shipping" when a heavy or oversized product is added. Supports ANY (at least one product) and ALL (all products must be present) matching modes. = 🔤 URL Transliteration = Automatically converts Cyrillic characters in product, category, and post slugs to Latin on save — essential for SEO on Bulgarian-language stores. Also includes a manual transliteration tool for converting any text. = 🛍️ Bulk Edit Products = Edit prices and stock levels across your entire catalogue from a single table view. Apply mass discounts (percentage off, fixed reduction, or set price) to selected products at once. Original prices are backed up automatically — restore them with one click. Full support for variable products and product variations. = ⚡ Performance First = Every feature is fully gated behind its toggle. When a feature is disabled, zero hooks are registered — WordPress never even loops through them. Admin assets load only on plugin pages. Frontend CSS loads only on WooCommerce pages. = 🔒 Security = Built to WordPress coding standards: nonce verification on every form and AJAX request, capability checks, prepared SQL statements, sanitised inputs, and escaped outputs throughout. = Theme Compatibility = Works with any theme that follows WooCommerce standards. Includes dedicated integration layers for **Woodmart** (AJAX cart + dark mode), **Divi**, and **WooCommerce Blocks** (Gutenberg checkout). = Translations = Includes translations for: English, Bulgarian (bg_BG), German (de_DE), Spanish (es_ES), Greek (el_GR). == 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 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.7.2 = * **New Feature – Mass Discount module:** Separated into its own independent module with a dedicated admin page and its own On/Off toggle in General Functions. Supports named promotions — each discount run is saved with a custom label (e.g. "Summer Sale"), percentage, and date. The promotions panel on the left lists all active promotions with live product counts; clicking a promotion filters the product table to show only the products in that promotion. Original prices are backed up automatically and can be restored per-product or in bulk at any time. Products discounted before this feature was introduced continue to work normally under "All with active discount". * **Improvement – Bulk Edit Products: SKU inline editing:** SKU cells in the Bulk Edit Products table are now inline-editable. Click any SKU cell to edit in place; uniqueness is validated server-side before saving (duplicate SKUs are rejected with an error message). Variable products support SKU editing directly in the table. * **Fix – Product filter not applied in Mass Discount:** Switching to `WP_Query` directly (replacing `wc_get_products()`) to fix paginated meta-query filtering. `wc_get_products()` silently ignored `meta_query` in paginated requests, causing the promotion filter to return all products instead of the filtered set. = 1.7.1 = * **Bug fix – Admin styles and scripts not loading:** All plugin sub-pages (Minimum Order, Product Links, Auto Add Product, URL Transliteration, Redirect, etc.) were loading without any admin styles or JavaScript. Root cause: WordPress generates sub-page screen IDs from the sanitised menu *title* (`sanitize_title('ShopBoost')` → `shopboost`), producing IDs like `shopboost_page_flexmior-*`. The previous detection used `strpos($screen_id, 'flexible-minimum-order')` which never matched these IDs. Fixed by also checking for `flexmior` in both `$screen->id` and the `$hook` parameter — now covers all current and future plugin pages reliably. * **Bug fix – Auto Add Product product list not injected:** The product list for the Auto Add Product page was gated behind a strict equality check against a hardcoded screen ID (`flexible-minimum-order_page_flexmior-auto-add-product`) that was also affected by the same naming issue above. Replaced with a `strpos()` check so the product data is correctly passed to JavaScript regardless of the screen ID prefix. * **Improvement – Minimum Order settings page redesign:** Rebuilt with a proper two-column card layout (Basic Settings + Custom Message + Shortcode on the left; Notice Colors + Typography on the right). Fixed a broken form structure where `