❇️ Features
- #10762 - Added a Parent Category column to the admin category listing, so where a category sits in the tree shows at a glance. It can be sorted, searched and filtered through a dropdown of the categories that have children; root categories show an empty cell.
🐛 Bug Fixings
-
Fixed the paragraph and heading dropdown missing from the rich text editor toolbar, which still named TinyMCE 5's
formatselectcontrol instead of TinyMCE 6'sblocks. -
Themes can now register their own image cache templates under
customize.image_cacheinconfig/themes.php, overriding or adding to the core sizes, choose which ones product, category and swatch image URLs carry, and ship their own product placeholders. -
Section types are now declared per theme under
customize.sectionsinconfig/themes.php, in Add Section tile order, so a theme can offer its own section types without core changes. -
Fixed the Customize action being offered for installed themes that no channel runs; only an active theme can be customized now, and the server enforces it.
-
Fixed the appearance preview always rendering the channel's own theme; it now renders the theme being edited.
-
Footer links now take any number of columns instead of a fixed two, wrapping to fit every screen and leaving out empty columns, and existing footers keep working.
-
Fixed My Reviews, the RMA pages and product rich snippets loading full-size product image files directly; they now go through the product image helper, with its sizes, placeholders and theme templates.
-
Fixed category logos and banners, and image swatches, not loading from a storage disk that is not local, and the image carousel section rewriting stored paths into image sizes and drawing slides without an image.
-
An attribute option's
swatch_value_urlis now the URL of its stored file, as every model image URL is; sized swatch URLs come from the configurable product config orimage_urls(). -
Corrected the titles and descriptions in Admin → Configuration that named settings which no longer exist or defined the concept rather than the setting, in all 22 locales.
-
Fixed the LinkedIn social login button never appearing, because the configuration field was named after the Socialite driver while the installer seeded the plain provider name.
-
Fixed tax calculated on the shipping origin ignoring its post code, which was read from a configuration key that does not exist.
-
Fixed Admin → Configuration pages keeping a two-column layout on small screens, which squeezed the settings panel; the description and panel now stack.
-
Fixed a configuration URL naming a section that does not exist answering with a server error rather than a not found, whether the unknown name was the group or the section within it.
-
Fixed a configuration file download URL answering with a server error rather than a not found when the file was never uploaded or is missing from the disk.
-
Fixed a created, updated or removed catalog rule, and the nightly price reindex, leaving product pages and storefront listings on the old price; their cached pages are now dropped once prices are reindexed.
-
Fixed checkout and admin order creation rejecting the address of a virtual or downloadable only cart when its billing address was not used for shipping, as it required a shipping address.
-
Fixed products on a channel that does not have the admin locale missing from the admin product listing, and their edits being saved in a locale the channel cannot show.
-
Security fixes.
-
#11481 - Fixed editing or deleting a CMS page leaving the old page cached for other locales, currencies, channel domains and signed-in customers; signed-in customers are no longer served cached pages.
-
#11479 - Fixed the storefront password fields offering no way to see the password outside sign in, which only had a checkbox. Every password field now has an eye icon inside it, which also stands in for Microsoft Edge's own reveal button.
-
#11477 - Fixed logging in as a customer from the admin landing on the default channel rather than the customer's own. A signed-in customer is now sent to their assigned channel and cannot open the account area on a channel their account is not registered on.
-
#11473 - Fixed a configurable product's parent disappearing from the Elasticsearch index when one of its variants was deleted. Only the products actually removed are now deleted from the index, and the surviving parent is reindexed.
-
#11461 - Fixed the tax category form showing an empty, required Tax Rates field when no tax rates exist, leaving nothing to save. It now says tax rates must be created first, links to create one for admins allowed to, and keeps Save disabled until a rate exists.
-
#11458 - Fixed a category still filtering by an attribute after Use Layered Navigation was turned off for it, which left the filter on the storefront with no way to untick it in the category. A category now filters only by attributes that are still in layered navigation, and turning one back on restores the categories it was chosen for.
-
#11450 - Fixed a guest turned back from checkout to sign in being left on the home or account page afterwards, losing the product they had chosen with Buy Now. The checkout is now returned to after signing in, registering or using a social provider.
-
#11446 - Fixed the loading placeholders on the storefront customer account pages. Reviews drew its product thumbnail through the lazy image loader with no source, so the placeholder turned itself into a broken image, and it stood in for a heading the page had already drawn, leaving the cards to jump as the reviews arrived. Orders, Downloadable Products, GDPR and RMA drew a table row where each of them lists cards on a phone. Every placeholder now has the shape and height of what replaces it.
-
#11445 - Fixed Full Page Cache configuration refusing to save. Its lifetime field carries Laravel's
nullablerule, which was passed to Vee Validate in the browser and threw "No such validator 'nullable' exists"; rules only the server understands are no longer sent to it. -
#11441 - Fixed numeric datagrid filters ignoring a value's decimal part, so an order-total filter of 50.20 matched on 50. Integer and decimal columns now compare the value exactly and can be filtered by operator — equals, greater than, less than, or a range.
-
#11440 - Fixed the checkout payment-method radio button overlapping the method's logo and name on a mobile viewport; the card now reserves space for the radio so its content stays clear.
-
#10842 - Fixed checkout and address forms accepting a state that does not belong to the selected country, such as California after switching to India.