ShopBoost – WooCommerce Toolkit

Changelog

1.7.4

  • Fix – URL Transliteration broke menu links: Display-time filters (wp_nav_menu_items, the_content, the_excerpt) were transliterating URLs on output without checking whether the underlying slug had actually been changed — producing links to non-existent pages. Removed all three display-time hooks; transliteration now happens exclusively at save time and via the manual/auto scan, which is the correct approach.
  • Fix – URL Transliteration could not transliterate taxonomy terms: apply_manual_transliteration() called get_term_by(‘slug’, …, ”) with an empty taxonomy string. WordPress’s taxonomy_exists(”) returns false, so the lookup always failed silently — no category, tag, or product-category slug was ever updated. Now iterates all public taxonomies. Also added urldecode() on the slug extracted from the URL path so URL-encoded Cyrillic characters match the database value.
  • Fix – “Run Scan Now” button did nothing when Automatic Scanning was off: The button called auto_scan_and_transliterate(), which checks flexmior_auto_scan_enabled and returns early when disabled. Added a dedicated run_scan_now() method that always executes regardless of the auto-scan toggle.
  • New – URL Health Status dashboard: The URL Transliteration settings page now shows a live health-status card at the top that loads automatically on page open. Displays the count of untransliterated URLs grouped by type (Post, Page, Product, Category, Menu Link) with original vs. transliterated URLs side by side. Includes a one-click Transliterate All button and a Fix Selected Menu Links action for custom-link menu items.
  • New – Menu custom-link scanning: The health check now also scans WordPress navigation menus for custom-link items containing Cyrillic URLs, which the existing post/term scan did not cover. Detected menu links can be fixed individually or via the Transliterate All action.
  • Fix – Minimum Order feature enabled by default on fresh install: The flexmior_feature_minimum_order_enabled option defaulted to 1 in five places, causing it to appear active immediately after plugin installation. Changed all defaults to 0 — all features now start disabled and must be explicitly enabled by the admin.
  • Fix – Quick Order: variable product variation not recorded: The form did not capture the selected variation. Added a hidden variation_id field, JavaScript listener for WooCommerce found_variation/reset_data events, server-side validation (variation must belong to the parent product), and variation-aware display in admin list, detail view, email notifications, and Convert to Order.
  • Fix – Quick Order: public submit endpoint worked with feature disabled: The AJAX handler was registered unconditionally but did not check the feature toggle, allowing submissions even when Quick Order was turned off. Added an early flexmior_feature_quick_order_enabled check.
  • Fix – Quick Order: empty text options left buttons unlabelled: Saving an empty Form Title, Submit Button Text, or Collapsed Button Text resulted in blank labels. Added a get_text_option() helper that falls back to the default value when the stored option is an empty string.
  • Fix – Quick Order: WooCommerce HPOS incompatible order links: Hardcoded post.php?post=X&action=edit URLs do not work when High-Performance Order Storage is active. Replaced with $order->get_edit_order_url() in the orders list, detail modal, and Convert to Order response.

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 <form> opened inside the left column while Visual Settings and the Save button were outside it — meaning visual settings were never actually submitted. Added toggle switches, a live message preview, a live visual preview (colours and typography), and a one-click shortcode copy button.

1.7.0

  • New Feature – BGN ↔ EUR Dual Currency: Shows the secondary currency equivalent next to every price across the store (product listings, variable product ranges, cart item prices and subtotals, cart grand total, mini-cart, order pages, My Account, and transactional emails). Works in both directions — BGN stores show EUR (÷ 1.95583); EUR stores show лв. (BGN) (× 1.95583). Uses the fixed ECB conversion rate (1 EUR = 1.95583 BGN). Configurable display format (brackets or slash), position (after or before), and independent per-location toggles. Settings page adapts automatically to the active store currency.
  • Performance – Feature hooks: Every feature toggle now truly disables its code path. All Auto Add Product hooks (six in total) are now gated behind the feature toggle — zero callbacks registered when the feature is off.
  • Performance – Admin asset loading: Replaced 19 redundant page-detection if blocks in admin_scripts() with a single strpos() check on the screen ID. Covers all current and future plugin pages automatically. Product Links admin bundle now loads only when the Product Links feature is enabled.
  • Performance – Color CSS variables: Notice colour overrides moved from a raw wp_head echo to wp_add_inline_style(), removing a separate render-blocking <style> tag.
  • Performance – BGN/EUR frontend CSS: .fmo-eur-price rule moved permanently into frontend.css (already loaded only on WooCommerce pages), removing one inline style block per page load.
  • Redirect – URL matching fixed: Removed an impossible fourth SQL variation (raw REQUEST_URI with query string — source URLs are stored without query strings so it could never match). Query now uses three clean, documented variations.
  • Redirect – DB error logging: All four AJAX operations (create, update, delete, toggle) now log $wpdb->last_error on failure for easier debugging.
  • Price Variation – Two-column layout: Settings page rebuilt with side-by-side layout matching the rest of the plugin UI.
  • Price Variation – Checkbox template fixed: “Checkbox – Square” template now renders correctly; previously fell back silently to the Table template.
  • Price Variation – Checkbox Settings card: Dedicated settings card (size and four colors) appears automatically when the Checkbox template is selected.
  • Price Variation – Highlight Selected: Toggle now correctly emits or suppresses .selected CSS rules for all five templates.
  • Price Variation – UI consistency: Toggle switches, color fields, number inputs, and save button now use the standard plugin design system.
  • Size Chart editor rewrite: Fully data-driven. PHP parses saved chart HTML into a JSON model via DOMDocument; JavaScript renders from that model. Removed ~270 lines of legacy DOM-scraping code and all production console.log() leaks.
  • Size Chart – Display Settings UX: Two always-visible multi-select boxes replaced with a segmented “Show on” toggle (All Products / By Category / Specific Products).
  • Safer toggling: Admin UI, settings link, and shortcodes remain always-on so settings are always accessible regardless of feature state.

1.6.4

  • Cleanup: Removed leftover console.log() debug statements from the Checkout Field Editor and URL Transliteration screens. Only console.error() calls for genuine failures (missing jQuery UI, AJAX errors) remain.

1.6.3

  • Fix: Bulk Edit Products page threw SyntaxError: Expected property name or ‘}’ in JSON when a category name contained an apostrophe, ampersand, or other character mangled by esc_js(). The categories list is now injected with wp_json_encode() directly (no JSON.parse() / esc_js()), which produces a valid JavaScript array literal regardless of the contents.

1.6.2

  • Fix: Drag-and-drop reordering on the Checkout Field Editor now works for both default WooCommerce fields and custom fields. The default fields container was switched from CSS grid to flexbox (jQuery UI sortable cannot compute positions inside a grid container), a dedicated .fmo-drag-handle element is now the sortable handle so Edit/Hide/Required buttons stay clickable, and the custom fields table helper now preserves column widths during drag.

1.6.1

  • View layer extracted: Every admin page HTML template has been moved out of class-settings-page.php into its own file under includes/views/. The class shrinks from 5,914 to 556 lines and now contains only routing, menu registration, settings sanitizers, and thin delegators to the view files. No behaviour changes.
  • Maintainability: Each screen is now reviewable on its own (view-redirect.php, view-bulk-edit.php, view-checkout-field-editor.php, etc.).

1.6.0

  • Architecture refactor: The monolithic settings class has been split into dedicated AJAX handlers (Redirects, Checkout Fields, URL Transliteration, Product Generator, Bulk Edit) and a reusable URL transliterator service. No user-facing behaviour changes; AJAX endpoints and nonces are preserved.
  • Security by default: New Flexmior_Ajax_Handler base class enforces check_ajax_referer() + current_user_can() on every AJAX endpoint — it is no longer possible to add a handler that forgets the check.
  • Smaller core file: class-settings-page.php reduced from 7,918 → 5,914 lines (-25%). Feature code lives in focused files under includes/ajax/.
  • Dead code removed: upload_image_from_url() (unused).

1.5.3

  • HPOS fix: Custom checkout fields now use the Order CRUD API ($order->update_meta_data / $order->get_meta) instead of legacy post meta — required for stores running High-Performance Order Storage.
  • Security hardening: Added explicit phpcs:ignore annotations with justifications to direct database queries against plugin tables; strict comparison (true) added to all in_array() calls.
  • Code quality: Replaced gmdate() with wp_date() for analytics date grouping so results respect the site timezone.
  • JS cleanup: Debug console output is now gated behind a debug flag (enabled automatically when WP_DEBUG is true). Production console stays quiet; real errors still log via console.error.
  • Cleanup: Removed dead code blocks, debug HTML comments, and stale // ПРЕМАХНАТО markers.
  • Activation: Explicit defaults when reading options in the activation hook.

1.5.2

  • New: Conditional Free Shipping now supports custom checkout text for uncalculated shipping labels (editable from settings)
  • Bug fixes: Fixed minor bugs and improved overall stability

1.5.1

  • Bulk Edit: Added product image column in table
  • Bulk Edit: Products per page filter (10, 20, 50, 100)
  • Admin bar: ShopBoost menu for quick access to Settings and Bulk Edit
  • Bulk Edit: Mass discount with save & restore – original prices saved automatically, restore action to undo
  • Bulk Edit: Full variation support – backup/restore and all bulk actions apply to variable product variations
  • Bulk Edit: Variable products show min–max price ranges; Variations badge in table
  • File cleanup for WordPress.org compliance – removed development-only docs
  • Updated README.md with accurate plugin description

1.5.0

  • New: Size Chart feature (Beta) – display size guide tables in product tabs, via shortcode, or as popup
  • New: Bulk Edit Products – edit prices, stock, and apply bulk promotions in a table view with search and filters
  • Performance: Frontend CSS loads only on cart, checkout, shop, and product pages (not on blog/archive)
  • Performance: Color CSS variables injection limited to WooCommerce pages only
  • Performance: Auto Add Product product list limited to 500 items for faster loading
  • Performance: Added lightweight frontend.css (~3 KB) with only notice styles
  • Size Chart marked as Beta in admin interface
  • Plugin optimized for speed and compatibility with latest WordPress

1.4.1

  • Minimum order now uses cart contents only (products) – shipping, taxes and fees are excluded from the minimum order check
  • Fixed redirect logic on login/registration pages (replaced undefined is_login/is_registration with proper WordPress/WooCommerce checks)

1.4

  • Improved Checkout Field Editor with simplified modal design and better user experience
  • Enhanced Redirect page with compact layout and improved modal interface
  • Fixed drag and drop functionality for reordering checkout fields
  • Fixed show/hide functionality for default WooCommerce checkout fields
  • Enhanced security with improved SQL injection protection and data sanitization
  • Reorganized General Functions page – active features first, then Coming Soon features
  • Improved overall admin interface consistency and usability

1.3.3

  • Redesigned General Functions page with modern card-based layout
  • Added feature toggle system for enabling/disabling individual features
  • Added 6 new “Coming Soon” features: Advent Calendar, Free Shipping Bar, Price Tracking, Abandoned Cart, Price Variation, and Checkout Field Editor
  • Improved admin interface with full-width responsive grid layout
  • Updated plugin icons (Shopboostar.png and Icondash.ico) for better visual identity
  • Removed deprecated icon-128×128.png
  • Enhanced product links page with improved product name and price formatting
  • Optimized icon sizes for better performance (20x20px for menu icons)
  • Improved code organization and preparation for future feature releases

1.3.2

  • Added Woodmart theme integration with full AJAX cart support
  • Added mini cart widget message for Woodmart theme
  • Added protection against duplicate plugin loading using FLEXIBLE_MINIMUM_ORDER_LOADED constant
  • Improved theme detection for Woodmart, Divi, and default themes
  • Added dark mode support for Woodmart theme
  • Enhanced responsive styles for all integrations

1.3.1

  • Fixed Gutenberg/Blocks integration – HTML tags now display correctly as HTML instead of plain text
  • Fixed syntax error in JavaScript code for Blocks integration
  • Fixed output escaping issues in all integration files
  • Updated “Tested up to” WordPress version to 6.9
  • Removed all debug messages (console.log and error_log) for production release
  • Improved HTML rendering in Gutenberg Blocks minimum order messages
  • Enhanced security with proper output escaping and sanitization

1.3.0

  • Added Auto Add Product feature – Automatically add products to cart when customers reach specified amounts
  • Added support for multiple auto-add products with individual configuration per product
  • Added discount options for auto-added products (Percentage, Fixed Amount, Set Price)
  • Added option to automatically remove products from cart when total falls below threshold
  • Added option to hide auto-added products from shop pages (only visible when automatically added)
  • Moved “Enable direct checkout links” option to Product Links page for better organization
  • Improved admin interface with full-width product configuration table
  • Enhanced security with proper input sanitization and validation
  • Fixed all security warnings and linter errors
  • Improved JavaScript functionality for dynamic product row management

1.2.1

  • Fixed issue where “Enable Minimum Order” checkbox could not be properly disabled
  • Improved form submission handling to correctly save checkbox states when unchecked
  • Enhanced settings save logic to properly detect Basic Settings form submission

1.2

  • Added Product Links feature – Generate direct checkout links for products
  • Added variation selection popup for variable products when copying checkout links
  • Added “Copy Checkout Link” action in product list for quick link generation
  • Improved admin interface with new “Product Links” submenu page
  • Enhanced security with proper input sanitization and validation
  • Fixed all linter warnings and security recommendations
  • Added phpcs.xml configuration file for code quality
  • Improved JavaScript error handling and user feedback
  • Added modal popup for variation selection with AJAX support
  • Updated menu naming to “Flexible Minimum Order” (restored original name)
  • Enhanced copy-to-clipboard functionality with visual feedback
  • Added support for variable products in direct checkout links
  • Improved code documentation and comments

1.0.1

  • Applied flexmior/fmo_ prefixes across entire codebase for better uniqueness
  • Added direct access guards (ABSPATH) to all PHP files
  • Implemented robust admin assets enqueue logic for proper page detection
  • Fixed all i18n and escaping issues with proper translator comments
  • Updated plugin headers with correct URIs and requirements
  • Added migration path for old option names to maintain backward compatibility
  • Deprecated old shortcode while maintaining backward compatibility
  • Removed all debug code and improved code quality
  • Enhanced security with proper nonce verification and sanitization
  • Updated readme.txt to WordPress.org standards

1.0.0

  • Initial release
  • Basic minimum order amount functionality
  • Category-based minimum amounts
  • Custom message customization
  • HPOS compatibility
  • Modern admin interface

Plugin Website
Visit website

Author
GDimitrov
Version:
1.7.4
Last Updated
June 12, 2026
Requires
WordPress 6.1
Tested Up To
WordPress 7.0
Requires PHP
7.4

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.