- Sales and discounts now support using related entries in their matching item conditions. (#3134, #2717)
- It’s now possible to query products by shipping category and tax category. (#3219)
- Guest customers registering during checkout now have their addresses saved to their account. (#3203)
- Product conditions can now have “Product Type”, “Variant SKU”, “Variant Has Unlimited Stock”, “Variant Price”, and “Variant Stock” rules. (#3209)
- Improved the performance of discount recalculation.
- Improved the performance of the
commerce/upgrade
command. (#3208) - Added the
commerce/cart/forget-cart
action. (#3206) - The
commerce/cart/update-cart
action now acceptsfirstName
andlastName
address parameters. (#3015) - Added
craft\commerce\controllers\OrdersController::EVENT_MODIFY_PURCHASABLES_TABLE_QUERY
. (#3198) - Added
craft\commerce\elements\Order::$orderCompletedEmail
. (#3138) - Added
craft\commerce\elements\db\ProductQuery::$shippingCategoryId
. - Added
craft\commerce\elements\db\ProductQuery::$taxCategoryId
. - Added
craft\commerce\elements\db\ProductQuery::shippingCategory()
. - Added
craft\commerce\elements\db\ProductQuery::shippingCategoryId()
. - Added
craft\commerce\elements\db\ProductQuery::taxCategory()
. - Added
craft\commerce\elements\db\ProductQuery::taxCategoryId()
. - Added
craft\commerce\models\Discount::hasBillingAddressCondition()
. - Added
craft\commerce\models\Discount::hasCustomerCondition()
. - Added
craft\commerce\models\Discount::hasOrderCondition()
. - Added
craft\commerce\models\Discount::hasShippingAddressCondition()
. - Deprecated payment source creation via the
commerce/subscriptions/subscribe
action. - Deprecated
craft\commerce\elements\Order::setEmail()
.Order::setCustomer()
should be used instead. - Removed the
htmx
option from thecommerce/example-templates
command. - Removed the
color
option from thecommerce/example-templates
command. - Added
craft\commerce\events\ModifyPurchasablesTableQueryEvent
. (#3198) - Fixed a bug where products/variants could be saved with a minimum quantity that was set higher than the maximum quantity. (#3234)
- Fixed a bug where
craft\commerce\elements\Order::hasMatchingAddresses()
could incorrectly returnfalse
. (#3183) - Fixed a bug where changing a user’s email could cause additional user elements to be created. (#3138)
- Fixed a bug where related sales were displaying when creating a new product.
- Fixed a bug where Commerce wasn’t invoking
craft\services\Elements::EVENT_AUTHORIZE_*
event handlers. - Fixed a bug where discounts’ per user usage counters weren’t getting migrated properly when upgrading to Commerce 4.
- Fixed a bug where address changes weren’t being synced to carts that were using them. (#3178)
- Fixed an XSS vulnerability.