v13.32.0-beta.5
Pre-release
Pre-release
·
171 commits
to main
since this release
Added
- The login screen wears the theme's design, from the theme's own theme.json. WordPress loads the theme on
wp-login.phpbut emits none of its design there — measured: zero occurrences ofwp--preset--colorin the HTML of a login screen — so every site logs in through the same grey form whatever it looks like elsewhere. A theme that ships aconfig/login.phpnow gets its colours, radii and typography printed onlogin_head, its own logo above the form, and its home page behind that logo instead of wordpress.org. Nothing is duplicated: the design stays in theme.json, and restyling a theme restyles its login screen. Sign-in, lost password, reset, register and the confirm-admin-email prompt are all covered, being one screen as far aslogin_headis concerned. Strictly opt-in — a theme with noconfig/login.phpgets WordPress's screen, byte for byte, so upgrading the framework never changes the page people sign in through. See Theming → Login screen pollora/login/palette,pollora/login/logo,pollora/login/stylesandpollora/login/creditfilters, for a module or a plugin to take over any part of the login screen without touching the theme- Discovery says so when one location takes more than 250ms to scan, naming the location, the time and how many structures it found. The cost above was absorbed in complete silence for as long as it existed — no log line, no notice, nothing that measured it. Debug mode only: with the cache on, the cost is paid once
Changed
- A theme's
config/login.phpis loaded oninit, likemenus.php,sidebars.phpandtemplates.php, so__()works in it. WordPress firesinitthroughwp-load.phpbeforewp-login.phpfireslogin_init, so the config is in place well before anything reads it
Fixed
- Attribute discovery no longer walks a plugin's
node_modules. Themes and modules have always been scanned atapp/, falling back tosrc/— the two directories the autoloader mapsPlugin\{Name}\onto — while plugins were scanned at their root, which is wherenode_modules/lands as soon as a plugin has a Vite build. Symfony's Finder enumerates every file before filtering by extension, so the walk costs everything and the extension check costs nothing: measured on a demo plugin with a block build, 69,741 files walked on every request to reach the three PHP files the plugin owns — 1,691 ms against 1 ms for the same directory withoutnode_modules. It also discovered five WordPress core classes shipped inside@wordpress/style-engineand handed them to the discovery pipeline, which is its own kind of wrong. WithAPP_DEBUGon, discovery keeps no cache, so a site paid this on every request: the home page of a site with one such plugin went from 3.0s to 0.78s, and from 691MB of peak memory to 37MB under Blackfire. A plugin shipping neitherapp/norsrc/is still scanned at its root, so one keeping its classes at the top level is unaffected