=== 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.0 Requires PHP: 7.4 Stable tag: 1.7.3 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html All-in-one WooCommerce toolkit: minimum orders, auto-add, bulk edit, redirects, BGNβEUR, size charts, quick orders, checkout fields and more. == 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.3 = * **New Feature β Quick Order:** Customer-facing quick order form (renders automatically under Add to Cart, or via the `[flexmior_quick_order]` shortcode, or as a modal popup). Three display modes: **Inline** (form shown directly under Add to Cart), **Inline + Collapsible** (form starts hidden behind a single button β click to slide it open), and **Modal** (small trigger button opens a popup). Fully configurable field builder (text, textarea, email, tel, number, select, checkbox, radio β drag to reorder, mark as required, custom placeholders/options). Submissions are stored in a dedicated `wp_flexmior_quick_orders` table and listed under **ShopBoost β Quick Orders** with filters (status, search), detail modal, status updates (new / processing / done / rejected), and a one-click **Convert to Order** action that creates a real WooCommerce order. Email notifications: admin alert + optional customer confirmation. Built-in anti-spam: honeypot field (autofill-safe naming) + per-IP rate limiting (configurable). * **New Feature β Quick Order: Full button styling:** Dedicated "Button appearance" admin card lets you customise background color, hover color, text color, font family (13 presets + theme inherit), font size, font weight, padding, and border radius β all with a live preview that updates in real time. Styles are injected as inline CSS only when overridden; defaults stay clean. * **New Feature β Quick Order: Admin bar integration:** "Quick Orders" link added to the ShopBoost dropdown in the WordPress admin bar for one-click access to incoming submissions from anywhere in the admin. * **Improvement β Bulk Edit Products: Name and Slug inline editing:** Click any product name or slug cell to edit in place; saves on Enter/blur. Slugs are properly decoded from URL-encoded Cyrillic on display and re-sanitised on save. Blur without changes no longer triggers a save. * **Improvement β Mass Discount: Scheduled date range:** Each promotion can now be assigned a `from` / `to` date β WooCommerce native sale-price scheduling kicks in automatically. Promotion cards show a status badge (Active / Scheduled / Expired) plus the date range. * **Fix β Quick Order rendered inside the WooCommerce cart form:** Switched the auto-render hook from `woocommerce_after_add_to_cart_button` (inside the cart form) to `woocommerce_after_add_to_cart_form` (after the closing tag). The old placement produced nested forms β on certain themes the Quick Order submit was hijacked by the cart form, adding the product to the cart instead of saving the quick-order submission. Click handlers on the modal trigger and collapsible toggle now also call `preventDefault()` / `stopPropagation()` as a second line of defence. * **Fix β Quick Order modal showed "Submission failed" instead of the form:** In modal mode no inline form was rendered, so the JS had nothing to clone into the modal. The fallback message used the generic "Submission failed" string, which looked like a server error. The modal now pre-renders the form inside the container at page load β clicking the trigger shows the ready-to-use form instantly. * **Fix β Quick Order honeypot blocked legitimate submissions:** The hidden anti-spam field was named `flexmior_qo_website` with a label of "Website", which password managers and browser autofill commonly fill in automatically β triggering false-positive rejections. Renamed to a non-semantic name with `autocomplete="new-password"`, `opacity:0`, and `pointer-events:none` so autofill ignores it entirely. * **Fix β Quick Order button-in-button when modal mode + collapsible were both enabled:** Collapsible is now strictly an inline-mode feature. When Modal display mode is selected the Collapsible options are hidden in the admin UI and ignored on the front end, so the popup no longer contains a nested toggle button. = 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 `