Changelog

1.49 - 2026-09-10

  • **โœจ New**
  • - [add] Checkout block - build the checkout page in the editor and preview the real checkout in the canvas, with template and column settings in the block sidebar
  • - [add] AI content tools now show a rotating status message while they work, so a long generation no longer looks stalled
  • **๐Ÿ› Fixes**
  • - [fix] The Product Collection grid now previews in the editor exactly as it appears on the storefront - product images, prices and card styling were all missing before
  • - [fix] A shop page built with the Product Collection block is no longer told it is missing a shop block
  • - [fix] The Product Collection is limited to four columns, since five and six broke the card layout, and its product images are now rounded on every corner
  • - [fix] The Add to cart button on the shop no longer turns its label white on hover, which left it unreadable against the button
  • - [fix] The Checkout block can be selected in the editor and shows its full block options menu
  • - [fix] The Checkout block now starts on template one with a two column layout instead of no template of its own
  • - [fix] Checkout and shop styles now load inside the block editor canvas, so previews match the storefront
  • - [imp] The placeholder Billing Address and standalone Cart blocks are retired in favour of the Checkout block; pages already using them keep working
  • **๐Ÿงน Internal**
  • - [ci] Removed the end-to-end test gate from the WordPress.org release workflow

1.48 - 2026-08-26

  • **๐Ÿ”’ Security**
  • - [security] Cart requests can no longer be pointed at another shopper's cart, so one customer can never read or change someone else's basket
  • - [security] Checkout templates and their partials can no longer be loaded directly, and shipping method IDs, select options, and error messages are now escaped before they are printed
  • **โœจ New**
  • - [add] Postcode level tax rates - tax can now be set per postcode, and postcode lists, ranges, and wildcards are matched for both tax and shipping regions
  • - [add] Terms and privacy consent at checkout - a consent checkbox now appears above the confirm/pay button on all three checkout templates
  • - [add] Product structured data - product pages now publish Schema.org details such as price, availability, brand, product type, categories, and review ratings, so search engines can show rich results for your products
  • - [add] Out of Stock badge on the shop and single product pages, so shoppers see availability without opening the product
  • - [add] Business phone number setting, required for FedEx shipping labels
  • **๐Ÿ’ณ Payments & Checkout**
  • - [fix] Shipping cost and tax are now calculated correctly - regions saved at country, state, city, or postcode level are all matched, tax follows the delivery address for physical items and the billing address for downloads, and both lines refresh together whenever the address changes
  • - [fix] Cart totals are now rounded so the amount charged always matches the total shown on screen
  • - [fix] A second order can no longer be started while the first payment is still in flight, preventing duplicate orders and double charges
  • - [fix] "Same as Billing" now loads ticked and editable, so guest checkout is no longer rejected for a missing shipping address
  • - [fix] Shipping is no longer charged on a cart with nothing to ship, and shipping bands are recalculated when quantities change
  • - [fix] Shipping tiers no longer both match at a shared boundary, and an empty or zero maximum is treated as unlimited
  • - [fix] Coupons can no longer be applied twice, are capped at what is still discountable, and Buy X Get Y offers count free units per line
  • - [fix] The payment method handler no longer fires twice per click, and only gateways the store has enabled can be stored on an order
  • - [fix] Square no longer re-checks an unresolved store location on every screen, removing a slowdown on the checkout and settings pages
  • - [fix] A payment transaction can no longer be recorded twice under the same transaction ID
  • **๐Ÿ› Fixes**
  • - [fix] Adding a variation that does not exist, or sending a zero or emptied quantity, is now rejected with the reason instead of failing silently
  • - [fix] Checkout errors now show the message the server actually sent instead of [object Object]
  • - [fix] Opening a customer who no longer exists now shows a clear message and returns to the customer list instead of a blank screen
  • - [fix] EasyCommerce blocks render again in the block editor - Product Attributes and Product Tab no longer crash, and Rating previews with the product's real rating
  • - [fix] The Top Customers tables in Reports now show ten rows, matching the other report screens
  • - [ui] Refreshed the buttons and icons in the Brand, Category, Tag, and Attribute modals, unified the product popup styling, and stopped the tax rate dropdowns being clipped
  • - [fix] The plugin now loads its Composer autoloader by absolute path, fixing a fatal error on some server setups
  • **๐Ÿงน Internal**
  • - [test] Added an automated accessibility and mobile checkout suite that runs on every change
  • - [test] Added shipping and tax regression tests covering region granularity, postcode matching, digital and physical carts, and same-as-billing
  • - [docs] Aligned the feature documentation with what the code actually ships

1.47 - 2026-07-29

  • **โœจ New**
  • - [add] Product badges - assign New Arrival, Best Seller, Featured, or Sale badges to any product; they render on every shop template and on the single product page, Sale is detected automatically from the sale price, and New Arrival expires on its own after 30 days
  • - [add] Five new translations - Italian, Dutch, Russian, Japanese, and Simplified Chinese - bringing the bundled languages to ten, covering both the admin and the storefront
  • - [add] Reset Logs button on the AI Usage settings page to clear stored AI usage history
  • **๐Ÿ’ณ Payments & Checkout**
  • - [fix] Stripe now offers only the payment methods your account can actually charge in the checkout currency - Klarna and other local methods no longer appear where Stripe would reject them
  • - [fix] Stripe webhooks are now handled exactly once, so a replayed or retried notification can no longer complete or charge the same order twice
  • **๐Ÿ› Fixes**
  • - [fix] A blank Stock Count now correctly means "stock not managed" - untracked products no longer show as Out of Stock, clearing the field no longer fails to save, and digital variable products can be added to the cart again
  • - [fix] Digital products no longer display an Out of Stock badge
  • - [fix] Order Notes on the customer dashboard no longer fail with a permission error; add-to-cart is no longer logged twice, and notes from deleted orders no longer appear on new ones
  • - [fix] Admin notices no longer appear on the storefront, and only one notice is shown at a time
  • - [fix] Variations without a sale price are now priced at their regular price instead of 0.00
  • - [fix] Customer billing and shipping addresses are returned correctly by the API instead of as an empty value
  • - [fix] Your usage-data sharing choice is now saved reliably and no longer resets when other settings are saved
  • - [imp] A failed addon installation now links directly to the manual installation page
  • - [imp] Business Type is now required in the setup wizard, with clearer validation
  • **๐Ÿงน Internal**
  • - [refactor] Feedback, integration requests, the setup wizard, and the deactivation survey now report through a single telemetry endpoint
  • - [test] Fixed 35 failing tests by root-causing each one, which also uncovered several of the pricing and API bugs fixed above
  • - [docs] Added a CHANGELOG.md kept in sync with this file

1.46 - 2026-07-22

  • **๐Ÿ”’ Security**
  • - [security] Option REST endpoints are now restricted to EasyCommerce settings keys, so arbitrary WordPress options can no longer be read or changed through the API
  • - [security] Hardened the CSV importer's remote image download against server-side request forgery
  • **โœจ New**
  • - [add] Setup wizard now creates the Shop, Checkout, and Customer Dashboard pages automatically - the page-selection step is gone
  • - [add] Starter store designs: ready-made page sections and full-page layouts to launch a store faster
  • - [add] WooCommerce migration can now be started from the setup wizard and a new "Migrate" admin-bar button, with automatic detection of installed platforms
  • - [ui] Redesigned media uploader with an inline upload area and improved gallery resizing
  • **๐Ÿ’ณ Payments & Checkout**
  • - [fix] Stripe now reuses a single customer record across all payment flows instead of creating duplicates
  • - [fix] Mollie refunds can now be issued from the order screen
  • - [fix] Restored double-payment protection - the cart is locked while a payment is in progress
  • - [fix] Geo lookup failures at checkout now show a clear error instead of failing silently
  • - [fix] Improved name validation on the checkout form
  • **๐Ÿ› Fixes**
  • - [fix] Installer no longer edits wp-config.php; a notice now warns when PHP memory is below the recommended 256M
  • - [fix] Locations database download now retries with a cap and exponential backoff, and validates the downloaded file before saving
  • - [fix] Removed a broken dashboard API route that returned a server error when called
  • - [fix] Corrected transaction ID and payment URL labels in order details
  • - [fix] Repositioned the Store Mode indicator in the admin bar with a clearer message
  • - [fix] Clearer empty-state message for attributes on the add product page
  • - [imp] More consistent error handling across admin pages
  • - [perf] Added missing database indexes for faster queries on large stores
  • - [perf] Block editor assets now load only on pages that actually use EasyCommerce blocks
  • **๐Ÿงน Internal**
  • - [refactor] Unified report cache invalidation behind a single easycommerce_clear_cache action
  • - [refactor] Removed dead code and resolved codebase audit inconsistencies
  • - [test] Test bootstrap now resets the correct database tables

1.45 - 2026-07-14

  • - [security] Digital download links are now only available once an order is paid - unpaid or cancelled orders can no longer access files
  • - [add] Addons screen now has category filter tabs for quicker browsing, and the payment settings link straight to the Payments category
  • - [fix] Removing a download file from a product variation now actually deletes it - removed files no longer reappear after saving
  • - [ui] Redesigned the customer account dashboard with a modern look and a cleaner order details layout

1.44 - 2026-07-11

  • **๐Ÿ”’ Security**
  • - [security] Square and Mollie payment amounts are now derived entirely from the server-side cart, preventing tampered checkout requests from altering the charged or recorded totals
  • - [security] Braintree and Square now charge the order's locked total instead of a live-recomputed cart total at payment time
  • - [security] AI Shopping Agent endpoint now requires a valid nonce or logged-in user, so unauthenticated requests can no longer consume AI credits
  • **๐Ÿ’ณ Payments**
  • - [fix] Added deterministic idempotency keys to Mollie and Square payments, preventing duplicate charges on webhook retries and double-submits
  • - [fix] Payment no longer processes twice per checkout when a legacy standalone gateway addon (Stripe, PayPal, Square, Cash on Delivery) is active alongside the core gateway
  • - [fix] Fixed a fatal error on the payment page when the Subscriptions addon is active
  • **๐Ÿ›’ Checkout & Shipping**
  • - [add] Shipping methods now show a loading overlay while rates are being fetched, and rates refresh only after all required address fields are filled
  • - [fix] Simplified and fixed the billing-to-shipping address copying at checkout
  • **๐ŸŽจ Storefront & Admin**
  • - [fix] Restored shop block styling and Tailwind classes in the block editor preview
  • - [ui] Shop page filter bar now scrolls horizontally on narrow screens, with corrected filter dropdown positioning
  • - [add] AI settings now show connection-aware Connectivity and Usage tabs, plus a "Connect AI" admin-bar shortcut when the store is disconnected
  • - [fix] Success toaster now appears after connecting AI from the Settings page popup

1.43 - 2026-07-06

  • - [add] Orders now store the selected shipping method and display its name in the order details
  • - [add] Order API responses now include coupon, shipping method, and shipping method label data
  • - [add] Extensibility slot on the order details page for addons to inject custom content
  • - [ui] Responsive layout improvements across all admin pages - dashboard, products, orders, customers, reports, coupons, attributes, brands, categories, tags, shipping, tax, and help

1.42.2 - 2026-07-04

  • - [add] Select settings fields can now allow free-text input - pick from the list or type your own value
  • - [add] Store address State and City fields now let you type a custom value when it isn't in the list
  • - [fix] Reordered the store address fields to the standard country-first order
  • - [ui] Added help descriptions to the remaining settings fields

1.42.1 - 2026-07-03

  • - [add] Test-mode banner on the storefront for logged-in admins, with a "Go Live" shortcut - so admins can tell that customers are blocked at checkout while the store is in Test mode
  • - [fix] Test mode now also hides single product pages and the product archive, which were still reachable by direct URL
  • - [fix] "Store Launching Soon" page no longer renders a duplicate, misplaced header/footer and now shows the theme footer correctly

1.42 - 2026-07-03

  • **๐Ÿ”’ Security**
  • - [security] Prevented SQL injection through ORDER BY identifier validation in database queries
  • - [security] Replaced raw unserialize() with maybe_unserialize() in abandoned cart retrieval to harden against object injection
  • - [security] Stripe payment intent creation now enforces order ownership
  • **โœจ New**
  • - [add] Generate and share a payment link for unpaid orders directly from the order screen
  • - [add] Editable abandoned-cart reminder email popup with an automatic daily reminder cron
  • - [add] Failed payments now show a proper "Failed" order status instead of "N/A"
  • **๐Ÿ’ณ Payments**
  • - [fix] Cash on Delivery no longer creates a false transaction entry on order placement
  • - [fix] Stripe Buy Now, Pay Later methods are hidden when the order exceeds their maximum amount
  • - [fix] Rate-limited Stripe payment error logging to prevent log flooding
  • **๐Ÿ›’ Cart, Checkout & Shipping**
  • - [fix] Unified backend payment lock stops the cart from changing during payment
  • - [fix] Checkout now auto-selects the cheapest available shipping method
  • - [fix] A shipping maximum of 0 now correctly means "unlimited" instead of disabling the method
  • - [fix] Draft and other non-published products can no longer be added to the cart
  • **๐Ÿ“ฆ Orders & Reports**
  • - [fix] Clearer feedback and error handling for invalid or missing order IDs
  • - [fix] Order amount getters now return floats for PHP 8.x strict-type safety
  • - [fix] Revenue report validates its date range against the supported ranges
  • **๐ŸŽจ Storefront & Email**
  • - [ui] Fixed the shop page on mobile and tablet: responsive product grid and full-height filter drawer
  • - [content] Rewrote all default transactional email templates (order, refund, account) for clearer copy
  • **๐Ÿ“ WordPress.org & Developer**
  • - [i18n] Resolved WordPress.org guideline issues: text domain/i18n, CDN asset offloading, and composer.json
  • - [docs] Disclosed all external services in the readme
  • - [docs] Shortened the plugin display name and cleaned up readme metadata
  • - [test] Fixed OrderFactory test failures from non-scalar defaults and documented the related test bugs
Scroll to Top