- [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