Timeline
11/10/2026: Today
- 21:07 Changeset [64538] by
-
- trunk/readme.html
- trunk/wp-admin/includes/class-wp-site-health.php
- trunk/wp-includes/version.php
Database: Bump the recommended version of MySQL to 8.4.
MySQL 8.0 reached end of life on 30 April 2026 but was still the recommended version in
readme.htmland Site Health. MySQL 8.4 is an LTS release supported until April 2032, and has been tested in CI since [59280].
Follow-up to [59280], [62170].
Props lucatume, desrosj, masteradhoc.
Fixes #66637.
- 20:48 Changeset [64537] by
-
- trunk/wp-includes/sodium_compat/src/Core/ChaCha20.php
- trunk/wp-includes/sodium_compat/src/Core/Curve25519.php
- trunk/wp-includes/sodium_compat/src/Core/Ed25519.php
- trunk/wp-includes/sodium_compat/src/Core/Ristretto255.php
- trunk/wp-includes/sodium_compat/src/Core/SecretStream/State.php
- trunk/wp-includes/sodium_compat/src/Core32/ChaCha20.php
- trunk/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php
- trunk/wp-includes/sodium_compat/src/Core32/Ed25519.php
- trunk/wp-includes/sodium_compat/src/Core32/SecretStream/State.php
- trunk/wp-includes/sodium_compat/src/File.php
- trunk/wp-includes/version.php
External Libraries: Update
sodium_compatto version1.24.2.
This updates the
sodium_compatlibrary from version1.24.1to1.42.2.
This update is a hardening release.
A full list of changes can be found on GitHub: https://github.com/paragonie/sodium_compat/compare/v1.24.1...v1.24.2.
Props johnbillion.
Fixes #66650.
- 20:23 Changeset [64536] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant registration cleanup.
Remove final taxonomy and post type cleanup calls already covered by the inherited per-test setup.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15497, https://github.com/WordPress/wordpress-develop/pull/15498
Props devmuhib.
See #65893.
- 19:27 Changeset [64535] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Make the file watcher pick up changes reliably.
The
npm run devwatcher often missed changes entirely, such as edits tosrc/js/_enqueues/lib/emoji-loader.js. The causes lay in grunt-contrib-watch and its gaze dependency, so they could not be fixed through configuration:
- Gaze enumerated every file under a pattern before applying exclusions, including every installed plugin and bundled
node_modulesdirectory, which could block the watcher for minutes. - Each file was then polled every two seconds.
- The watchers were recreated after each run, missing changes made in the meantime.
The watch task is therefore replaced with one built on chokidar, which uses native file system events, skips ignored directories, and keeps a single watcher for the session. Polling remains available via
CHOKIDAR_USEPOLLING=1for network drives and Windows drives accessed from WSL. Version 4 of chokidar is used, matching@wordpress/buildin Gutenberg, since version 5 is ESM-only.
The new watch task also changes what is rebuilt:
- Only the files that the build uses are now watched, and the
alltarget copies the same files thatcopy:filesdoes instead of everything insrc. - The
:dynamictask configuration is now built from all files changed together and reset on each run. Previously only the last changed file was rebuilt, and a staleclean:dynamiclist could delete uploaded files. - Changed scripts are minified by the same uglify target as in the build.
- When the Gruntfile changes, the watcher restarts in a new process, and the previous one keeps watching until the new one is ready, so edits made during the restart are still built.
A new opt-in
--symlinkoption fornpm run build:devandnpm run devsymlinks the scripts copied unchanged fromsrc/js/_enqueues, so edits take effect without the watcher. It is opt-in because Docker Desktop's file sharing can fail to read a path that switches between a file and a symlink until the environment is restarted.
Developed in https://github.com/WordPress/wordpress-develop/pull/15863.
Follow-up to r43309, r43324, r43327, r44359, r56461, r61475.
Props westonruter, lancewillett, siliconforks, sirlouen.
See #44271, #63606, #64563.
Fixes #66638, #63605.
- 18:51 Changeset [64534] by
-
- trunk/wp-includes/secrets.php
- trunk/wp-includes/version.php
Docs: Mark the internal Secrets API helper functions as private.
Adds
@access privateto the eight underscore-prefixed functions inwp-includes/secrets.php:_wp_secrets_get_store(),_wp_secrets_get_key_manager(),_wp_secrets_get_provider(),_wp_secrets_set(),_wp_secrets_get(),_wp_secrets_delete(),_wp_secrets_retire()and_wp_secrets_list().
These are internal helpers that only core calls. The tag makes the code reference show that they are not meant for plugins or themes.
Follow-up to r64337.
Props wildworks.
Fixes #66187.
- 18:40 Changeset [64533] by
-
- trunk/wp-admin/includes/class-wp-debug-data.php
- trunk/wp-admin/includes/class-wp-site-health.php
- trunk/wp-admin/includes/secrets-site-health.php
- trunk/wp-includes/version.php
Security: Move Secrets API Site Health checks into
WP_Site_Health.
The Secrets API's Site Health checks and debug information lived in
wp-admin/includes/secrets-site-health.php, as functions hooked ontosite_status_testsanddebug_information. That is how the feature plugin added them, and the file was carried over unchanged. Core's own checks are methods ofWP_Site_HealthandWP_Debug_Data, and these now are too.
The three checks are
WP_Site_Health::get_test_secrets_api_key_source(),::get_test_secrets_api_undecryptable()and::get_test_secrets_api_needs_rotation(), registered as direct tests inWP_Site_Health::get_tests()under the same IDs and labels. The debug information isWP_Debug_Data::get_wp_secrets_api().
The statuses, labels and descriptions of the checks are unchanged. Three things do change, to match the rest of core:
- The debug information section key is
wp-secrets-api, notsecrets-api. - The results use the blue Security badge whatever the status.
- The results include an
actionskey.
secrets-site-health.phpand thewp_secrets_site_health_*()functions are removed. None of them has been in a release.
Follow-up to r64337, r65385, r65387.
Props ericmann, peterwilsoncc, mindctrl.
See #66187.
- 17:36 Changeset [64532] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add a user factory fixture to the E2E tests.
The
userFactoryfixture creates users and deletes them when the test ends, also if the test fails.signIn()logs a user in throughwp-login.php.users.test.jsanddashboard.test.jsuse them instead of their own cleanup and login code.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15884
Props adrianmoldovanwp.
See #66455.
- 16:57 Changeset [64531] by
-
- trunk/wp-includes/version.php
Post WordPress 7.2 Beta 5 version bump.
- 16:22 Changeset [64530] by
-
- trunk/wp-includes/version.php
WordPress 7.2 Beta 5.
- 16:00 Changeset [64529] by
-
- trunk/wp-includes/load.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-keyring.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-store.php
- trunk/wp-includes/secrets/class-wp-secrets-config-key-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-keyring.php
- trunk/wp-includes/secrets/class-wp-secrets-libsodium-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-option-store.php
- trunk/wp-includes/secrets/class-wp-secrets-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-store.php
- trunk/wp-includes/secrets/interface-wp-secrets-keyring.php
- trunk/wp-includes/secrets/interface-wp-secrets-provider.php
- trunk/wp-includes/secrets/interface-wp-secrets-store.php
- trunk/wp-includes/version.php
- trunk/wp-settings.php
Security: Make the Secrets API extension points abstract classes.
WP_Secrets_Provider,WP_Secrets_StoreandWP_Secrets_Keyringwere interfaces. Once they ship, adding a method to one would be a fatal error in everysecrets.phpdrop-in that implements it, so they could never change. As abstract classes, a later release can add a method with a default implementation and existing drop-ins keep working.
The method signatures are unchanged. The three files are renamed from
interface-wp-secrets-*.phptoclass-wp-secrets-*.php, and the default and fail-closed implementations now extend the classes.
A drop-in written against the interfaces must change
implementstoextends. Until it does, loading it is a fatal error.
Props ericmann, jorbin.
See #66187.
- 15:43 Changeset [64528] by
-
- trunk/wp-admin/setup-config.php
- trunk/wp-config-sample.php
- trunk/wp-includes/version.php
Security: Generate
WP_SECRETS_KEYduring installation.
Since r65385 the Secrets API has no key to fall back on, so a new site had no working Secrets API until someone added
WP_SECRETS_KEYtowp-config.phpby hand.
wp-config-sample.phpnow definesWP_SECRETS_KEYwith the placeholder, after the keys and salts. It sits outside their group because, unlike them, this key must not change once secrets are stored. The Secrets API rejects the placeholder, so a sample that is copied by hand and left unedited does not become a usable key.
setup-config.phpfills the key in when it fills in the salts. The value is a base64-encoded random 32-byte key. Without a source of random bytes it comes fromwp_generate_password(), as the salts do. When the sample has noWP_SECRETS_KEYline, as in a custom or older localized sample, the define is added after the salts.
Existing sites are not affected. Tools that write
wp-config.phpthemselves, such as WP-CLI'swp config create, need the same change separately.
Props ericmann, peterwilsoncc, digitalpritam, ravipatel, Clorith, dhrupo.
Fixes #66399. See #66187.
- 15:42 Changeset [64527] by
-
- trunk/wp-includes/version.php
General: Ensure
svn:eol-styleis consistently set for recently added files.
Also convert the 33 CRLF line endings in
tests/e2e/specs/media-upload.test.jsto LF, as the property requires consistent line endings.
Follow-up to [46636], [51246].
Fixes #66651.
- 15:40 Changeset [64526] by
-
- trunk/wp-admin/includes/secrets-site-health.php
- trunk/wp-includes/version.php
Security: Correct the Secrets API Site Health reports.
The Secrets API tests in Site Health could report a broken setup as healthy, and gave advice that did not fit the site.
A key that cannot unwrap the stored root key was reported as good. It is now critical, because no secret can be read or saved in that state. For the default keyring the result explains that
WP_SECRETS_KEYwas changed or removed and that restoring the previous value fixes it. For a keyring from asecrets.phpdrop-in, it shows that keyring's own error.
When the secrets cannot be listed, the undecryptable test is now critical and the rotation test is recommended. Both previously treated the
WP_Erroras an empty list and reported good. A broken keyring is detected by its class instead of by matching the translated word "broken", so it is no longer missed on translated sites.
When a drop-in replaces the provider, the key source test says the provider manages its own keys and no longer recommends
WP_SECRETS_KEY. Site Health Info marks the keyring class and key source as not used by the provider.
A key that is not in the recommended form is no longer described as one to regenerate. Once secrets are stored, the result says to keep its current value. The undecryptable result no longer says the values can never be recovered, since restoring the previous key makes them readable again.
Follow-up to r64337, r65374, r65385.
Props nofearinc, ericmann, ravipatel, dhrupo, Clorith, jorbin, peterwilsoncc.
Fixes #66380. See #66187.
- 15:26 Changeset [64525] by
-
- trunk/wp-includes/Requests/src/Utility/Trim.php
- trunk/wp-includes/version.php
External Libraries: Include new file added in Requests 2.0.21.
This adds the new
src/wp-includes/Requests/src/Utility/Trim.phpfile that was missed in r65383.
Follow up to r65383.
Unprops desrosj.
- 15:24 Changeset [64524] by
-
- trunk/wp-admin/includes/secrets-site-health.php
- trunk/wp-includes/secrets.php
- trunk/wp-includes/secrets/class-wp-secrets-config-key-provider.php
- trunk/wp-includes/version.php
Security: Require
WP_SECRETS_KEYfor the Secrets API.
Without
WP_SECRETS_KEY, the default keyring derived its key fromLOGGED_IN_KEY . LOGGED_IN_SALT. Rotating the salts, which is routine advice, then locked every stored secret. The salts were also read directly rather than throughwp_salt(), so an unfilled or translated placeholder fromwp-config-sample.phpcould become the key.
This removes the fallback. Without a usable
WP_SECRETS_KEY, every call that needs the key returnssecret_key_unavailable. A key is not usable when it is empty or only whitespace, when it is thewp-config-sample.phpplaceholder, or when it equals any of the authentication keys and salts.
Site Health reports a missing or unusable key as recommended and shows a newly generated
define()line to add. It reads the key's state from the newWP_Secrets_Config_Key_Provider::get_key_status()instead of parsing the translated key source.
This also introduces
wp_is_secrets_api_available(), so a caller can check before moving a credential into the Secrets API. It returnsfalsewhen thesecrets.phpdrop-in failed to load, when the default keyring has no usable key, or when the key cannot unwrap the stored root key.
A site that stored secrets under the fallback keeps them. They can be read again once
WP_SECRETS_KEYis set to a new key,WP_SECRETS_KEY_PREVIOUSis set to the oldLOGGED_IN_KEY . LOGGED_IN_SALT, and the root key is re-wrapped withWP_Secrets_Key_Manager::rotate_site_key().
Follow-up to r64337.
Props ericmann, peterwilsoncc, Clorith, dhrupo, wildworks, johnbillion, jorbin, digitalpritam.
See #66187.
- 15:20 Changeset [64523] by
-
- trunk/wp-includes/version.php
General: Officially declare support for PHP 8.6.
All known PHP 8.6 compatibility issues have been addressed.
This adds
8.6to the versions WordPress 7.2 supports listed in the.version-support-php.jsonfile, which ensures the version is tested in several GitHub Actions workflows. The PHPUnit test suite is no longer allowed to fail on PHP 8.6.
Fixes #66648.
- 15:14 Changeset [64522] by
-
- trunk/wp-includes/Requests/src/Cookie.php
- trunk/wp-includes/Requests/src/Exception/Transport/Curl.php
- trunk/wp-includes/Requests/src/IdnaEncoder.php
- trunk/wp-includes/Requests/src/Ipv6.php
- trunk/wp-includes/Requests/src/Requests.php
- trunk/wp-includes/Requests/src/Response.php
- trunk/wp-includes/Requests/src/Session.php
- trunk/wp-includes/Requests/src/Ssl.php
- trunk/wp-includes/Requests/src/Transport/Curl.php
- trunk/wp-includes/Requests/src/Transport/Fsockopen.php
- trunk/wp-includes/version.php
External Libraries: Update Requests library to version 2.0.21.
This update primarily includes a PHP 8.6 compatibility fix. The only other changes found in 2.0.18-2.0.21 are to the root certificate bundle included in the library, which are skipped as WordPress manages its own certificate bundle.
Props davidbaumwald.
Fixes #66647.
- 14:59 Changeset [64521] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add a post factory fixture to the E2E tests.
The
postFactoryfixture creates posts and pages, and force-deletes them when the test ends, also if the test fails. Four specs use it instead of their own cleanup code.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15875
Props adrianmoldovanwp.
See #66455.
- 14:58 Changeset [64520] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Revoke application passwords after each E2E test.
The application passwords spec revoked the admin's passwords only before each test, so the create test, or a test that failed, could leave its password on the site. The spec's fixture now revokes them after each test too.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15874
Props adrianmoldovanwp.
See #66455.
- 14:52 Changeset [64519] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Wait for login autofocus in the self-demotion E2E test.
The test could type the password while
wp-login.phpmoved focus to the username field, so the password went into the wrong field.
Follow-up to [65334].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15862
Props shailu25.
See #66455.
- 10:32 Changeset [64518] by
-
- trunk/wp-includes/assets/script-loader-packages.php
- trunk/wp-includes/assets/script-modules-packages.php
- trunk/wp-includes/build/routes/font-list/content.js
- trunk/wp-includes/build/routes/font-list/content.min.asset.php
- trunk/wp-includes/build/routes/font-list/content.min.js
- trunk/wp-includes/build/scripts/core-fields/attachment/author/field.php
- trunk/wp-includes/build/scripts/core-fields/index.php
- trunk/wp-includes/build/scripts/core-fields/post_type_supports/author/field.php
- trunk/wp-includes/build/scripts/core-fields/post_type_supports/excerpt/field.php
- trunk/wp-includes/build/scripts/core-fields/post_type_supports/publish_date
- trunk/wp-includes/build/scripts/core-fields/post_type_supports/publish_date/field.php
- trunk/wp-includes/build/scripts/core-fields/post_type_supports/scheduled_date/field.php
- trunk/wp-includes/build/scripts/core-fields/wp_block/description/field.php
- trunk/wp-includes/build/scripts/core-fields/wp_template/description/field.php
- trunk/wp-includes/css/dist/block-editor/style-rtl.css
- trunk/wp-includes/css/dist/block-editor/style-rtl.min.css
- trunk/wp-includes/css/dist/block-editor/style.css
- trunk/wp-includes/css/dist/block-editor/style.min.css
- trunk/wp-includes/css/dist/components/style-rtl.css
- trunk/wp-includes/css/dist/components/style-rtl.min.css
- trunk/wp-includes/css/dist/components/style.css
- trunk/wp-includes/css/dist/components/style.min.css
- trunk/wp-includes/css/dist/edit-site/style-rtl.css
- trunk/wp-includes/css/dist/edit-site/style-rtl.min.css
- trunk/wp-includes/css/dist/edit-site/style.css
- trunk/wp-includes/css/dist/edit-site/style.min.css
- trunk/wp-includes/css/dist/editor/style-rtl.css
- trunk/wp-includes/css/dist/editor/style-rtl.min.css
- trunk/wp-includes/css/dist/editor/style.css
- trunk/wp-includes/css/dist/editor/style.min.css
- trunk/wp-includes/js/dist/block-editor.js
- trunk/wp-includes/js/dist/block-editor.min.js
- trunk/wp-includes/js/dist/block-library.js
- trunk/wp-includes/js/dist/block-library.min.js
- trunk/wp-includes/js/dist/components.js
- trunk/wp-includes/js/dist/components.min.js
- trunk/wp-includes/js/dist/core-data.js
- trunk/wp-includes/js/dist/core-data.min.js
- trunk/wp-includes/js/dist/customize-widgets.js
- trunk/wp-includes/js/dist/customize-widgets.min.js
- trunk/wp-includes/js/dist/edit-site.js
- trunk/wp-includes/js/dist/edit-site.min.js
- trunk/wp-includes/js/dist/edit-widgets.js
- trunk/wp-includes/js/dist/edit-widgets.min.js
- trunk/wp-includes/js/dist/editor.js
- trunk/wp-includes/js/dist/editor.min.js
- trunk/wp-includes/js/dist/format-library.js
- trunk/wp-includes/js/dist/format-library.min.js
- trunk/wp-includes/js/dist/media-utils.js
- trunk/wp-includes/js/dist/media-utils.min.js
- trunk/wp-includes/js/dist/notices.js
- trunk/wp-includes/js/dist/notices.min.js
- trunk/wp-includes/js/dist/script-modules/block-library/image/view.js
- trunk/wp-includes/js/dist/script-modules/block-library/image/view.min.asset.php
- trunk/wp-includes/js/dist/script-modules/block-library/image/view.min.js
- trunk/wp-includes/js/dist/script-modules/boot/index.js
- trunk/wp-includes/js/dist/script-modules/boot/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/boot/index.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.js
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.js
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.min.js
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.js
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.min.js
- trunk/wp-includes/js/dist/script-modules/interactivity/index.js
- trunk/wp-includes/js/dist/script-modules/interactivity/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/interactivity/index.min.js
- trunk/wp-includes/js/dist/script-modules/workflow/index.js
- trunk/wp-includes/js/dist/script-modules/workflow/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/workflow/index.min.js
- trunk/wp-includes/js/dist/url.js
- trunk/wp-includes/js/dist/url.min.js
- trunk/wp-includes/js/dist/widgets.js
- trunk/wp-includes/js/dist/widgets.min.js
- trunk/wp-includes/version.php
General: Bump the pinned hash for Gutenberg to
1b0dc90.
This updates the pinned commit hash of the Gutenberg repository from
c035c1a649ef68f5c1646694cf440df1d7ae6e62to1b0dc90c700746b108e080263a4dc67707b750a1(fixes cherry-picked to thewp/7.2branch).
A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/c035c1a649ef68f5c1646694cf440df1d7ae6e62...1b0dc90c700746b108e080263a4dc67707b750a1
- [WP 7.2] Components, UI: Use focus-visible for disabled item focus rings (https://github.com/WordPress/gutenberg/pull/86269)
- Notes: Keep the canvas still when a new note is added (https://github.com/WordPress/gutenberg/pull/86283) (#86293)
- Post summary: Show placeholders for an empty excerpt and a missing author (https://github.com/WordPress/gutenberg/pull/85842) (#86294)
- Core fields: Restore the previous Publish and Status panel date behaviour (https://github.com/WordPress/gutenberg/pull/86065) (#86295)
- Interactivity API: Show the data-wp-html fallback on created elements under Trusted Types (https://github.com/WordPress/gutenberg/pull/84924) (#86306)
- [WP 7.2] UI: Add LoadingIndicator to item popups (https://github.com/WordPress/gutenberg/pull/86303)
- Interactivity Router: Fix nested router regions without data-wp-interactive disappearing on navigation (https://github.com/WordPress/gutenberg/pull/86061) (#86308)
- Interactivity API: Run watch() cleanups and attachTo render callbacks without a directive scope (https://github.com/WordPress/gutenberg/pull/86058) (#86311)
- DataForm: Fix clipped focus ring of field values in panel layout (https://github.com/WordPress/gutenberg/pull/86361) (#86369)
- Tests: Avoid passing an object when invoking static methods via reflection. (https://github.com/WordPress/gutenberg/pull/86329)
- [WP 7.2] DropdownMenu: Invert the selected item indicator while highlighted (https://github.com/WordPress/gutenberg/pull/86379)
- Fields: Lowercase the (no excerpt), (no author) and (no description) placeholders (https://github.com/WordPress/gutenberg/pull/86391) (#86424)
- Core fields: Decode non-Latin slugs in the slug field (https://github.com/WordPress/gutenberg/pull/86359)
- Interactivity API: Show the new page's server content in kept data-wp-html elements (https://github.com/WordPress/gutenberg/pull/86416)
- DataForm: Tighten value density in the panel layout (https://github.com/WordPress/gutenberg/pull/86389) (#86426)
- Post summary: Show "Immediately" and relative publish dates in the Date row (https://github.com/WordPress/gutenberg/pull/86367)
- [WP 7.2] Block Styles: Show the active style variation in forced colors mode (https://github.com/WordPress/gutenberg/pull/86450)
- Site Editor: Fix the frame snapping to the mobile width when resized with the mouse (https://github.com/WordPress/gutenberg/pull/86423)
- Image: measure the lightbox container, not the image's parent (https://github.com/WordPress/gutenberg/pull/82312) (#85491)
- URL: Decode percent-encoded characters in getFilename (https://github.com/WordPress/gutenberg/pull/86422) (#86477)
- Fix: Hide the author avatar when the site does not show avatars and frame a blank one. (https://github.com/WordPress/gutenberg/pull/86395)
- Date picker: Mark the posts of the month a typed or reset date moves to (https://github.com/WordPress/gutenberg/pull/86298) (#86463)
- Fix iOS 27 tap into a heading leaving the caret in a quote (https://github.com/WordPress/gutenberg/pull/85809)
- Hand focus back to the field on a press in every browser (https://github.com/WordPress/gutenberg/pull/86549)
- Prevent jobs from running within forks on
push. (https://github.com/WordPress/gutenberg/pull/85968) - i18n: Add translator context to the "Copy error" button label (https://github.com/WordPress/gutenberg/pull/85967)
- Bubble editor canvas events to the outer iframe (https://github.com/WordPress/gutenberg/pull/85263)
- UI: Use LoadingIndicator in remaining popup consumers (https://github.com/WordPress/gutenberg/pull/86501)
- Block Editor: Keep the revision canvas read-only in preview mode (https://github.com/WordPress/gutenberg/pull/84578)
- Core Data: Rank an exact title match first among tied link suggestions (https://github.com/WordPress/gutenberg/pull/86327)
- Tests: Render the router-html-server context case through state (https://github.com/WordPress/gutenberg/pull/86511)
- iOS tests: De-flake the selection handle test (https://github.com/WordPress/gutenberg/pull/85461)
Props mamaduka, wildworks.
See #66340.
Built from https://develop.svn.wordpress.org/trunk@65379
- 08:19 Changeset [64517] by
-
- trunk/wp-includes/load.php
- trunk/wp-includes/version.php
Security: Let the
secrets.phpdrop-in set plain variables.
wp_load_secrets_dropin()requireswp-content/secrets.phpinside a function, so a drop-in that set an override as a plain variable, such as$wp_secrets_keyring = new My_Keyring();, only set a local variable. The override was ignored and the default was used instead, with nothing to say so.
The
$wp_secrets_provider,$wp_secrets_storeand$wp_secrets_keyringglobals are now declared before the drop-in is required, asrequire_wp_db()does with$wpdbfordb.php. Drop-ins that write to$GLOBALSwork as before.
Follow-up to r64337.
Props ericmann, jorbin.
See #66187.
- 08:00 Changeset [64516] by
-
- trunk/wp-includes/version.php
Security: Document the Secrets API hardening tests.
Brings the tests added in r65375 in line with the conventions the Secrets API tests follow since r65272: each test has a summary and a
@coversannotation, and each assertion has a message.
See #66414.
- 07:59 Changeset [64515] by
-
- trunk/wp-includes/version.php
Tests: Cover deprecated block feature selectors in theme.json
Adds a test that registers a dedicated block with feature-level selectors defined via
__experimentalSelectorand verifies the generated color and typography styles.
Developed in https://github.com/WordPress/wordpress-develop/pull/15849
Props shailu25, wildworks.
Fixes #66640.
Built from https://develop.svn.wordpress.org/trunk@65376
- 07:59 Changeset [64514] by
-
- trunk/wp-admin/options.php
- trunk/wp-includes/secrets.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-keyring.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-cipher.php
- trunk/wp-includes/secrets/class-wp-secrets-config-key-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-libsodium-provider.php
- trunk/wp-includes/secrets/interface-wp-secrets-keyring.php
- trunk/wp-includes/secrets/interface-wp-secrets-provider.php
- trunk/wp-includes/version.php
Security: Harden secret names, parameters and the root key field.
Fixes three small issues in the Secrets API:
wp_secrets_validate_name()accepted a name with a trailing newline, because$also matches before a final newline. The options API trims option names, so that name shared a row with the name without the newline, and a write through one made the other unreadable. The pattern now ends with\z.- A secret value or key material could appear in a stack trace when an exception was thrown while a secret was being saved. The parameters that receive them are now marked with
#[\SensitiveParameter]. Attributes are not inherited, so keyrings and providers in a drop-in need to add it themselves. - Settings > All Settings showed
_wp_secrets_root_keyas an editable field, and saving the screen with it changed made every stored secret unreadable. The field is now masked, disabled and left out of the options the screen saves, like the connector API keys.
Follow-up to r64337.
Props dhrupo, aryanjasala, ericmann.
Fixes #66414. See #66187.
- 07:50 Changeset [64513] by
-
- trunk/wp-admin/includes/plugin.php
- trunk/wp-includes/version.php
Plugins: List
secrets.phpas a drop-in.
wp-content/secrets.phphas been loaded on every request since r64337, but it was missing from_get_dropins(). Neither the Drop-ins view of the Plugins screen nor the Drop-ins section of Site Health Info showed it.
Follow-up to r64337.
Props nofearinc, ericmann.
See #66380.
- 07:48 Changeset [64512] by
-
- trunk/wp-includes/secrets/class-wp-secrets-key-manager.php
- trunk/wp-includes/secrets/class-wp-secrets-libsodium-provider.php
- trunk/wp-includes/version.php
Security: Keep the Secrets API root key after a failed read.
WP_Secrets_Key_Manager::get_root_key()generated a new root key wheneverget_site_option()returnedfalse. That also happens when the query fails, and on a single site the new key then overwrote the stored one, so every existing secret became unreadable. Two requests creating the first root key at the same time could overwrite each other in the same way.
A
falseresult is now checked against the database before a key is generated. If that read also fails, aWP_Erroris returned and nothing is written. Reading a secret no longer creates a root key:WP_Secrets_Libsodium_Provider::get()returns an error when none is stored. The first root key is inserted withINSERT IGNOREon a single site, so an existing key is never overwritten. On multisite, every request uses the oldest row, and a request that lost the race deletes its own.
Follow-up to r64337.
Props aryanjasala, dhrupo, ericmann.
Fixes #66413. See #66187.
- 06:53 Changeset [64511] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add a script to fix stale PHPStan baselines.
Since PHPStan 2.3.5, its
--fixoption removes stale ignores in place: it lowers the count of a baseline entry whose error now occurs fewer times, removes an entry that matches nothing, and removes an@phpstan-ignorecomment that no longer ignores anything. That is quicker than regenerating the baselines, since it reuses the result cache, and it also clears the stale inline ignores, which regenerating leaves to be removed by hand.
The new
composer phpstan:fixscript (andnpm run typecheck:php:fix) runs PHPStan with--fix, then the baseline generator with its new--pruneoption, which deletes any baseline left with no entries along with itsincludesentry, and then the analysis once more, since--fixreports only what it fixed and succeeds even when other errors remain. Both analyses usephpstan.neon.dist, because a local configuration at another rule level can report a baselined error with a different message, and--fixwould then remove entries that the default configuration still needs.
The CI annotations, step summary, and pull request comment now recommend the new script, and the annotation of an error that PHPStan can fix itself says so.
Developed in https://github.com/WordPress/wordpress-develop/pull/15479.
Follow-up to r63019, r64539, r65310.
Props westonruter, apermo.
See #65817.
- 05:23 Changeset [64510] by
-
- trunk/wp-includes/interactivity-api/class-wp-interactivity-api.php
- trunk/wp-includes/version.php
Interactivity API: Choose the
data-wp-htmlplaceholder marker in linear time.
Replace the repeated input-search loop with a UUID-based marker, generated
when the firstdata-wp-htmlhost renders and reused by subsequent hosts
in the same processing call.
This removes input-dependent searching, keeps placeholder length fixed,
and avoids generating a UUID when no host renders.
Props jonsurrell.
Fixes #66498.
Built from https://develop.svn.wordpress.org/trunk@65371
- 05:19 Changeset [64509] by
-
- trunk/wp-includes/abilities-api.php
- trunk/wp-includes/abilities-api/class-wp-ability.php
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-run-controller.php
- trunk/wp-includes/version.php
Abilities API: Replace
coerce_input()withprepare_input()
Add a public
WP_Ability::prepare_input()method that normalizes, validates, and sanitizes input in one call. Use it inWP_Ability::execute()and the REST run controller.
Rename
coerce_input()to the protectedsanitize_input(), so sanitization cannot run on input that was not validated.coerce_input()was not released yet, so this is not a breaking change.
Developed in https://github.com/WordPress/wordpress-develop/pull/15685.
Follow-up to [65044], [65306].
Props gziolo, jorgefilipecosta, justlevine, zaguiini.
See #66383.
Fixes #66482.
- 04:52 Changeset [64508] by
-
- trunk/wp-includes/class-wp-query.php
- trunk/wp-includes/rest-api.php
- trunk/wp-includes/rest-api/class-wp-rest-response.php
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php
- trunk/wp-includes/revision.php
- trunk/wp-includes/version.php
REST API: Accept a post object in global styles
prepare_links().
The
WP_REST_Global_Styles_Controller::prepare_links()override took a post ID while the parent method takes aWP_Post, which PHPStan reports as an incompatible child parameter type. It now accepts either, andprepare_item_for_response()continues to pass the ID so that subclasses overriding the method and expecting an ID are not broken. The method also gains a precise return type, which in turn required narrowing the types it relies on: REST URLs are documented as non-empty, andcountis declared as a non-negative link attribute.
The
WP_Query::$found_postscount is now clamped to zero, both from thefound_posts_queryquery and after thefound_postsfilter, since a negative post count has no valid meaning and would otherwise surface as a negative revisions count. In r65281 only$max_num_pageswas clamped, and its test asserted a negativefound_postsmerely as a precondition.
Developed in https://github.com/WordPress/wordpress-develop/pull/15826.
Follow-up to r48328, r52051, r56082, r65281.
Props westonruter, huzaifaalmesbah, dpknauss.
See #65817.
- 04:16 Changeset [64507] by
-
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-run-controller.php
- trunk/wp-includes/version.php
Abilities API: Skip redundant input sanitization in the REST run endpoint
The permission callback and
WP_Ability::execute()already normalize, validate, and coerce input. Theinputargument now setssanitize_callbacktonull, so both receive the original raw input.sanitize_input_for_ability()is deprecated and returns its input unchanged.
Follow-up to [62674], [65044].
Developed in https://github.com/WordPress/wordpress-develop/pull/15684.
Props gziolo, jorgefilipecosta, euvoor, justlevine.
Fixes #66383.
- 01:35 Changeset [64506] by
-
- trunk/wp-admin/includes/image-edit.php
- trunk/wp-includes/class-wp-image-editor-gd.php
- trunk/wp-includes/version.php
Media: Use
imageflip()to flip images with GD.
WP_Image_Editor_GD::flip()and the deprecated_flip_image_resource()mirrored images by copying them withimagecopyresampled()and negative source dimensions. With the GD 2.4.0 bundled in PHP 8.6, this produces an all-black image. It affects flips in the image editor, and also JPEG uploads with an EXIF orientation of 2, 3 or 4, whichWP_Image_Editor::maybe_exif_rotate()flips.
Both functions now flip the image in place with
imageflip(), and the output stays the same as before. Palette images are still converted to truecolor, alpha blending is turned off and alpha saving on, and the resolution and interlacing are reset to GD's defaults of 96 DPI and off. This matches whatrotate(),crop()andresize()produce. Whether every operation should keep the source image's resolution and interlacing will be decided in a follow-up ticket.
When no valid image is loaded,
flip()now returns aWP_Errorinstead of throwing aTypeError.
Props sanjith2023, rumancodes, arshidkv12, dhruvang21, abhishekfdd, desrosj.
Fixes #66113.
- 00:30 Changeset [64505] by
-
- trunk/wp-content/themes/ipsum/.nvmrc
- trunk/wp-content/themes/ipsum/DESIGN.md
- trunk/wp-content/themes/ipsum/assets/css/editor-style.css
- trunk/wp-content/themes/ipsum/contributing.txt
- trunk/wp-content/themes/ipsum/functions.php
- trunk/wp-content/themes/ipsum/inc/abilities.php
- trunk/wp-content/themes/ipsum/package-lock.json
- trunk/wp-content/themes/ipsum/package.json
- trunk/wp-content/themes/ipsum/patterns/about-row.php
- trunk/wp-content/themes/ipsum/patterns/archive-columns.php
- trunk/wp-content/themes/ipsum/patterns/archive-compact.php
- trunk/wp-content/themes/ipsum/patterns/archive-full.php
- trunk/wp-content/themes/ipsum/patterns/archive-lead.php
- trunk/wp-content/themes/ipsum/patterns/archive-minimal.php
- trunk/wp-content/themes/ipsum/patterns/archive-photographic.php
- trunk/wp-content/themes/ipsum/patterns/archive-simple.php
- trunk/wp-content/themes/ipsum/patterns/archive-standard.php
- trunk/wp-content/themes/ipsum/patterns/contact-say-hi.php
- trunk/wp-content/themes/ipsum/patterns/cta-membership.php
- trunk/wp-content/themes/ipsum/patterns/cta-search.php
- trunk/wp-content/themes/ipsum/patterns/events-list.php
- trunk/wp-content/themes/ipsum/patterns/footer-centered.php
- trunk/wp-content/themes/ipsum/patterns/footer-social.php
- trunk/wp-content/themes/ipsum/patterns/footer-subscribe.php
- trunk/wp-content/themes/ipsum/patterns/footer-wide.php
- trunk/wp-content/themes/ipsum/patterns/footer.php
- trunk/wp-content/themes/ipsum/patterns/format-audio.php
- trunk/wp-content/themes/ipsum/patterns/format-link.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid-full.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid-wide.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid.php
- trunk/wp-content/themes/ipsum/patterns/gallery-offset-full.php
- trunk/wp-content/themes/ipsum/patterns/gallery-offset.php
- trunk/wp-content/themes/ipsum/patterns/header-collapsed.php
- trunk/wp-content/themes/ipsum/patterns/header-default.php
- trunk/wp-content/themes/ipsum/patterns/header-vertical.php
- trunk/wp-content/themes/ipsum/patterns/hero-colophon.php
- trunk/wp-content/themes/ipsum/patterns/hero-epigraph.php
- trunk/wp-content/themes/ipsum/patterns/hidden-404.php
- trunk/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-archive.php
- trunk/wp-content/themes/ipsum/patterns/hidden-comments.php
- trunk/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-index.php
- trunk/wp-content/themes/ipsum/patterns/hidden-keep-reading.php
- trunk/wp-content/themes/ipsum/patterns/hidden-page-no-title.php
- trunk/wp-content/themes/ipsum/patterns/hidden-page-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-page.php
- trunk/wp-content/themes/ipsum/patterns/hidden-search-bar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-search.php
- trunk/wp-content/themes/ipsum/patterns/hidden-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-single.php
- trunk/wp-content/themes/ipsum/patterns/kind-words.php
- trunk/wp-content/themes/ipsum/patterns/navigation-overlay.php
- trunk/wp-content/themes/ipsum/patterns/overlay-contents.php
- trunk/wp-content/themes/ipsum/patterns/overlay-profile.php
- trunk/wp-content/themes/ipsum/patterns/page-bio.php
- trunk/wp-content/themes/ipsum/patterns/page-blog-home.php
- trunk/wp-content/themes/ipsum/patterns/page-soon.php
- trunk/wp-content/themes/ipsum/patterns/text-alternating.php
- trunk/wp-content/themes/ipsum/patterns/text-faqs.php
- trunk/wp-content/themes/ipsum/patterns/text-statement-wide.php
- trunk/wp-content/themes/ipsum/patterns/text-statement.php
- trunk/wp-content/themes/ipsum/style.css
- trunk/wp-content/themes/ipsum/style.min.css
- trunk/wp-content/themes/ipsum/styles/blocks/dot-separator.json
- trunk/wp-content/themes/ipsum/theme.json
- trunk/wp-includes/version.php
Bundled Themes: Update Ipsum for 7.2 Beta 5.
This updates Ipsum from
17a7ada71378a21c36670d67725b3ca632845a9ftobc2e5af700e28980f251d97f58cf80c72ee50a13on itstrunkbranch.
A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/ipsum/compare/17a7ada71378a21c36670d67725b3ca632845a9f...bc2e5af700e28980f251d97f58cf80c72ee50a13
- theme.json: Give negative outline offset for Button's focus styles (https://github.com/WordPress/ipsum/pull/187)
- Fix view transitions ignoring prefers-reduced-motion (https://github.com/WordPress/ipsum/pull/198)
- Register the pattern utility classes as block styles (https://github.com/WordPress/ipsum/pull/180)
- Fix the PHPStan level 10 errors that core reports (https://github.com/WordPress/ipsum/pull/171)
- Provide style.min.css for production (https://github.com/WordPress/ipsum/pull/61)
- Use the border radius shorthand in the patterns (https://github.com/WordPress/ipsum/pull/206)
- Describe every pattern and offer the format patterns as starter patterns (https://github.com/WordPress/ipsum/pull/181)
- Move what theme.json can express out of the block css strings (https://github.com/WordPress/ipsum/pull/185)
- Clean up editor-only attributes and serialization in the patterns (https://github.com/WordPress/ipsum/pull/204)
- Add DESIGN.md with the theme's design model (https://github.com/WordPress/ipsum/pull/186)
- Inline the theme stylesheet (https://github.com/WordPress/ipsum/pull/63)
- Design guide: Return all theme patterns after the registry has read them (https://github.com/WordPress/ipsum/pull/192)
This commit also includes changes that only exist in core:
- Ipsum is added to the
cssmin:themesGrunt task, so the build makes thestyle.min.cssthat the theme now enqueues. The built file is ignored. - The theme's
node_modulesdirectory is ignored, and left out of core's build. - The theme gets its own stylesheet build process, with
buildandwatchcommands that minifystyle.cssintostyle.min.css, set up through a newpackage.json,package-lock.jsonand.nvmrc. - A new
contributing.txtdocuments the build process and thetest-and-zip-default-themesworkflow now tests and runs that build for Ipsum. - Regression tests for the design guide ability are added in core, with a child theme fixture, because Ipsum's repository has no PHPUnit setup.
Follow-up to r60934, r64677, r64678, r64679, r65224.
Props yashjawale, shailu25, onemaggie, westonruter, josephscott, juanfra, mehtadev, mikachan, ravipatel, wildworks, courane01, poena, gziolo.
Fixes #66631.
See #66352.
- 00:08 Changeset [64504] by
-
- trunk/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss
- trunk/wp-content/themes/twentynineteen/style-editor.css
- trunk/wp-includes/version.php
Twenty Nineteen: Revert [65362] to fix a Unit test issue on version-controlled files.
Unprops audrasjb.
See #65433.
11/09/2026: Yesterday
- 23:59 Changeset [64503] by
-
- trunk/wp-content/themes/twentynineteen/style.css
- trunk/wp-includes/version.php
Twenty Nineteen: Partially revert [65362] to exclude version controlled files such as style.css.
Unprops audrasjb.
See #65433.
- 23:55 Changeset [64502] by
-
- trunk/wp-content/themes/twentynineteen/style-rtl.css
- trunk/wp-includes/version.php
Twenty Nineteen: Partially revert [65362] to exclude version controlled files such as RTL styles.
Unprops audrasjb.
See #65433.
- 23:41 Changeset [64501] by
-
- trunk/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss
- trunk/wp-content/themes/twentynineteen/style-editor.css
- trunk/wp-content/themes/twentynineteen/style-rtl.css
- trunk/wp-content/themes/twentynineteen/style.css
- trunk/wp-includes/version.php
Twenty Nineteen: Replace whitespace character for heading decoration.
When a user inserts an empty heading block in the editor and applies an "Underline" or "Strikethrough" text decoration, the browser attempts to underline the pseudo-element's whitespace character. This interaction causes a stray, visible hyphen-like artifact to render inside the editor above the empty block.
This changeset updates the CSS content property to use the empty string
content: "";instead ofcontent: \020. By removing the whitespace character, the pseudo-element no longer contains an actual text node.
Developed in https://github.com/WordPress/wordpress-develop/pull/12121.
Props karunyachavan84, sabernhardt, karmatosed, tusharaddweb, 369work.
Fixes #65433.
- 23:32 Changeset [64500] by
-
- trunk/wp-includes/class-wp-application-passwords.php
- trunk/wp-includes/functions.php
- trunk/wp-includes/version.php
Application Passwords: Pass unslashed data to hooks.
The name of an application password appeared with backslashes in the "Application Password Created" email, so a name such as
Bob's Appshowed asBob\'s App. This happened becauseWP_Application_Passwords::create_new_application_password()and::update_application_password()expect slashed data and have passed it to their actions unchanged since 5.6.0. Both methods now unslash their input.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15608
Follow-up to [63582], [64253], [65091].
Props peterwilsoncc, jorbin, audrasjb, ssebuwufumoses.
Fixes #63927.
- 23:19 Changeset [64499] by
-
- trunk/wp-content/themes/twentyseventeen/readme.txt
- trunk/wp-includes/version.php
Twenty Seventeen: Replace an asset reference that does not use a license that is compatible with GPL.
This changeset replaces the asset reference with a link to a Wikimedia Commons page, without "Source:", that could give more details.
Props mehrazmorshed, audrasjb, dd32, sabernhardt, karmatosed.
Fixes #64206.
See #30156.
- 22:41 Changeset [64498] by
-
- trunk/wp-admin/options-media.php
- trunk/wp-includes/version.php
Administration: Restore the full-width upload folder row on Settings > Media.
On Settings > Media, "Organize my uploads into month- and year-based folders" wraps onto three lines as soon as any plugin registers a field in the Uploads settings section.
The row spanned both columns unconditionally until [40823] which moved it inside the upload-path conditional in order to change its
thinto atd. That carriedcolspan="2"onto the editable-paths branch only.
This changeset closes the conditional above the row and restore the single unconditional cell, keeping the td/td-full markup [40823] introduced.
Follow-up to [40823].
Props imath, dpknauss, dhruvang21, audrasjb, dilip2615, im3dabasia1.
Fixes #51190.
- 20:19 Changeset [64497] by
-
- trunk/wp-content/themes/twentytwenty/.nvmrc
- trunk/wp-content/themes/twentytwenty/package-lock.json
- trunk/wp-content/themes/twentytwenty/package.json
- trunk/wp-includes/version.php
Twenty Twenty: Update to Node.js 24.x.
This updates the theme's
.nvmrcfile and theenginesfield inpackage.jsonto require Node.js24.18.0and npm11.16.0, bringing Twenty Twenty in line with Core and the other bundled themes.
This also adds the
devEnginesconfiguration used by Core and the other bundled themes, which enforces these minimum versions when installing dependencies or running npm scripts.
Twenty Twenty was the last bundled theme that had not been updated to Node.js 24.x.
Props desrosj, sabernhardt, manzoorwanijk, lucatume.
Fixes #65451. See #66099.
- 20:12 Changeset [64496] by
-
- trunk/wp-admin/js/media-frame-upload.js
- trunk/wp-admin/js/media-frame-upload.min.js
- trunk/wp-admin/js/media-upload-pipeline.js
- trunk/wp-admin/js/media-upload-pipeline.min.js
- trunk/wp-includes/version.php
Media: Keep non-image uploads on the classic upload path.
Fix an issue with the client-side media processing pipeline checking file types against the allowed mime types captured when the page rendered, not the uploader's own
filters.mime_types. File types a plugin allows for a single frame, such as SVG and JSON, were rejected in the browser with "Sorry, you are not allowed to upload this file type." before reaching the server.
After this change, only images the pipeline can process (currently JPEG, PNG, GIF, WebP, AVIF and HEIC/HEIF) are routed to it. Everything else (audio, video, PDF, SVG, JSON, archives) uploads through
async-upload.phpas it did before the pipeline was added. An image whose type is missing from the render-time allowed mime types also stays on the classic path, so the server decides whether to accept it. HEIC files are matched by extension too, because browsers without a HEIC codec may give them no type.
Follow-up to [64588].
Props desrosj, andrewserong.
See #66490.
- 20:08 Changeset [64495] by
-
- trunk/wp-content/themes/twentytwenty/.stylelintrc.json
- trunk/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css
- trunk/wp-content/themes/twentytwenty/assets/css/editor-style-block.css
- trunk/wp-content/themes/twentytwenty/package-lock.json
- trunk/wp-content/themes/twentytwenty/package.json
- trunk/wp-includes/version.php
Twenty Twenty: Replace the abandoned
stylelint-a11ydependency.
The
stylelint-a11ypackage has not been updated in over 7 years and is incompatible with newer versions of Stylelint and Node.js. This replaces it with@double-great/stylelint-a11y, an actively maintained fork, and replaces the deprecatedstylelint-config-wordpressconfiguration with@wordpress/stylelint-config.
The
a11y/selector-pseudo-class-focusrule is disabled for the block editor's Button and File block hover styles. These elements are editable text fields in the editor, so a:focusunderline would be displayed the entire time the text is being edited.
Props sabernhardt, desrosj.
Fixes #66004.
- 19:00 Changeset [64494] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add a remember method to the E2E site fixtures.
A spec that changes a setting or option through a form can now record the current value for teardown without writing it first.
Follow-up to [65312].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15851
Props adrianmoldovanwp.
See #66455.
- 16:35 Changeset [64493] by
-
- trunk/wp-includes/version.php
Tests: Add helpers for reading and setting protected image editor properties.
Replace the repeated
ReflectionPropertysetup in the image editor tests with two helpers onWP_Image_UnitTestCase.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15842
Props therssoftware, sanjith2023.
Fixes #66584.
- 16:13 Changeset [64492] by
-
- trunk/wp-content/themes/twentytwentyfour/accessibility.txt
- trunk/wp-includes/version.php
Twenty Twenty Four: A11y: Add
accessibility.txt.
Add documentation for the accessibility processes used in development of Twenty Twenty Four.
Developed in https://github.com/WordPress/wordpress-develop/pull/13765.
Props joedolson, mukesh27.
Fixes #66191.
Built from https://develop.svn.wordpress.org/trunk@65352
- 16:09 Changeset [64491] by
-
- trunk/wp-content/themes/twentytwentyfour/parts/header.html
- trunk/wp-content/themes/twentytwentyfour/patterns/footer-centered-logo-nav.php
- trunk/wp-content/themes/twentytwentyfour/patterns/header.php
- trunk/wp-content/themes/twentytwentyfour/patterns/hidden-sidebar.php
- trunk/wp-includes/version.php
Twenty Twenty Four: A11y: Add
aria-labelin default menu names.
Add missing default
aria-labelvalues to the hidden-sidebar, header, and footer with centered logo patterns in Twenty Twenty Four.
Developed in https://github.com/WordPress/wordpress-develop/pull/13763.
Props joedolson, mukesh27, rahultank, nhrrob, harishtewari.
Fixes #66189.
Built from https://develop.svn.wordpress.org/trunk@65351
- 15:44 Changeset [64490] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Retry failing E2E tests once in CI.
A test that fails twice needs a fix; a second retry only adds run time.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15848
Props adrianmoldovanwp.
See #66455.
- 15:30 Changeset [64489] by
-
- trunk/wp-admin/js/updates.js
- trunk/wp-admin/js/updates.min.js
- trunk/wp-includes/version.php
Plugins: Update custom plugin group counts after deleting a plugin.
Decrements counts for groups registered via the
plugins_listfilter when a plugin is deleted via Ajax, so tabs whose label is supplied throughplugins_list_status_textstay in sync without requiring a page reload.
Developed in https://github.com/WordPress/wordpress-develop/pull/14675.
Follow-up to r37714, r53124, r56068, r61695.
Props huzaifaalmesbah, wildworks, alessioarzentondev, gabrieleburgarella, enzo2018, lopo, realloc, f94leonardo, ozgursar, rollybueno, SergeyBiryukov,
Fixes #65191.
Built from https://develop.svn.wordpress.org/trunk@65349
- 14:41 Changeset [64488] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Wait for menu saves in the classic menus E2E test.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15772
Props adrianmoldovanwp.
See #66455.
- 14:25 Changeset [64487] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Stop the General Settings E2E specs from running together.
Both General Settings specs save the whole form, which writes every field on the page. When they ran at the same time in the
parallelproject, one spec's save could undo the other's change. Give both specs the same Playwright test lock, so they never overlap but stay inparallel.
Add a "Parallel safety" section to the E2E README: scope the test data, else lock every spec that writes the shared data, else move the spec to
serial.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15846
Props adrianmoldovanwp.
See #66392.
- 14:23 Changeset [64486] by
-
- trunk/wp-includes/version.php
Tests: Remove the
$startargument fromWP_UnitTest_Generator_Sequence.
The factories build each default value from the generator's template string and a shared counter, so a start value never reached the generated data. The network factory was the only caller that passed one.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15844
Props arkaprabhachowdhury, desrosj.
Fixes #37261.
- 11:24 Changeset [64485] by
-
- trunk/wp-includes/version.php
- trunk/wp-includes/view-config.php
Editor: Summarize the
datepanel of the post form withpublish_date.
In the default post type form returned by
_wp_get_default_posttype_form(), thedatefield is now a panel summarized by thepublish_datefield. The summary reads "Immediately" while the post has no date of its own, as the post summary did before it moved to the form.
Post types that provide their own form are unchanged.
Includes unit tests.
Props oandregal, jorgefilipecosta.
See #65981.
- 09:08 Changeset [64484] by
-
- trunk/wp-includes/class-wp-duotone.php
- trunk/wp-includes/class-wp-theme-json.php
- trunk/wp-includes/version.php
Code Modernization: Simplify duotone and theme.json defaults
Replaces guards that assign a value only when one is not already set with the null coalescing assignment operator (
??=) in duotone color parsing and block style variation metadata.
Developed in https://github.com/WordPress/wordpress-develop/pull/15354
Props mukesh27, shailu25, wildworks.
See #65823.
Built from https://develop.svn.wordpress.org/trunk@65344
- 08:58 Changeset [64483] by
-
- trunk/wp-includes/interactivity-api/class-wp-interactivity-api-directives-processor.php
- trunk/wp-includes/interactivity-api/class-wp-interactivity-api.php
- trunk/wp-includes/version.php
Interactivity API: Align server-side data-wp-html processing with client behavior.
Empty the element when its reference does not resolve to a trusted HTML token, and avoid processing directives inside content controlled by data-wp-html. Match the client's reference parsing, reserved-name filtering, namespace resolution, and conflicting-directive rules.
Ignore unsupported suffix and unique-ID entries while allowing their children to be processed. Ignore data-wp-html on void and text-only elements without evaluating its reference or changing their content.
Replace element content in a forward-only pass to avoid exceeding the HTML API's seek limit. Save and restore processing state around nested process_directives() calls.
Follow-up to [64386] and [64501].
Props santosguillamot.
Fixes #66246.
Built from https://develop.svn.wordpress.org/trunk@65343
11/08/2026:
- 23:50 Changeset [64482] by
-
- trunk/wp-includes/class-wp-block-pattern-categories-registry.php
- trunk/wp-includes/version.php
Docs: Document
descriptionfor block pattern categories.
Block pattern categories have accepted a
descriptionsince 6.2.0 / r55097, but theWP_Block_Pattern_Categories_Registry::register()docblock only listedlabel.
This commit:
- Documents the optional
descriptionproperty. - Adds a
@since 6.2.0note for it. - Corrects the
@returndescription, which referred to a pattern rather than a pattern category.
Developed in https://github.com/WordPress/wordpress-develop/pull/15505.
Follow-up to r55097.
Props mcsf.
See #65860.
Built from https://develop.svn.wordpress.org/trunk@65342
- 20:16 Changeset [64481] by
-
- trunk/wp-admin/css/common-rtl.css
- trunk/wp-admin/css/common-rtl.min.css
- trunk/wp-admin/css/common.css
- trunk/wp-admin/css/common.min.css
- trunk/wp-admin/css/edit-rtl.css
- trunk/wp-admin/css/edit-rtl.min.css
- trunk/wp-admin/css/edit.css
- trunk/wp-admin/css/edit.min.css
- trunk/wp-admin/includes/meta-boxes.php
- trunk/wp-includes/version.php
Editor: Add vertical margin between Save Draft and Preview.
In the Classic Editor, long translated strings could cause minor publication actions to wrap onto two lines. Following the admin reskin, the vertical margin was lost, creating a visual overlap in the layout.
Switch layout to use flex, accounting for extender usage of the panel and the existing spinner.
Developed in https://github.com/WordPress/wordpress-develop/pull/13807.
Props Emielb, audrasjb, afercia, sainathpoojary, im3dabasia1, therssoftware, joedolson.
Fixes #66188.
Built from https://develop.svn.wordpress.org/trunk@65341
- 19:38 Changeset [64480] by
-
- trunk/wp-includes/functions.php
- trunk/wp-includes/version.php
Media: Support specific media types that map to video but contain audio.
Some audio files can legitimately have real mime types that map to video. This causes an upload failure because of the mismatched subtype to primary type.
Add support for .m4a extensions that are detected as video mime types. Subtypes were already allowed in
wp_check_filetype_and_ext(), but the mismatched major type caused an upload failure.
Developed in https://github.com/WordPress/wordpress-develop/pull/13156.
Props soleo, subrataemfluence, ironprogrammer, joedolson, sanketparmar, arkaprabhachowdhury, andrewssanya, robertbpugh.
Fixes #46544.
Built from https://develop.svn.wordpress.org/trunk@65340
- 17:13 Changeset [64479] by
-
- trunk/wp-content/themes/twentytwentyfive/accessibility.txt
- trunk/wp-includes/version.php
Twenty Twenty Five: Add accessibility.txt file.
Add documentation file for the accessibility-ready requirements in Twenty Twenty Five.
Developed in https://github.com/WordPress/wordpress-develop/pull/13723.
Props joedolson, therssoftware.
Fixes #66179.
Built from https://develop.svn.wordpress.org/trunk@65339
- 17:10 Changeset [64478] by
-
- trunk/wp-content/themes/twentytwentyfive/theme.json
- trunk/wp-includes/version.php
Twenty Twenty Five: Adjust text input border colors for a11y.
Shift the colors used for text input borders so they meet the WCAG 3:1 contrast ratios in light theme variations.
Developed in https://github.com/WordPress/wordpress-develop/pull/13724.
Props joedolson, sabernhardt, rahultank.
Fixes #66180.
Built from https://develop.svn.wordpress.org/trunk@65338
- 16:42 Changeset [64477] by
-
- trunk/wp-content/themes/twentytwentyfour/styles/maelstrom.json
- trunk/wp-content/themes/twentytwentyfour/theme.json
- trunk/wp-includes/version.php
Twenty Twenty Four: Adjust text input border colors for a11y.
Shift the colors used for text input borders so they meet the WCAG 3:1 contrast ratios in all theme variations.
Developed in https://github.com/WordPress/wordpress-develop/pull/15349.
Props joedolson, sabernhardt, raiyanmarzan, denisej25.
Fixes #66190.
Built from https://develop.svn.wordpress.org/trunk@65337
- 06:26 Changeset [64476] by
-
- trunk/wp-admin/css/admin-menu-rtl.css
- trunk/wp-admin/css/admin-menu-rtl.min.css
- trunk/wp-admin/css/admin-menu.css
- trunk/wp-admin/css/admin-menu.min.css
- trunk/wp-admin/css/colors/_admin.scss
- trunk/wp-admin/css/colors/blue/colors-rtl.css
- trunk/wp-admin/css/colors/blue/colors-rtl.min.css
- trunk/wp-admin/css/colors/blue/colors.css
- trunk/wp-admin/css/colors/blue/colors.min.css
- trunk/wp-admin/css/colors/coffee/colors-rtl.css
- trunk/wp-admin/css/colors/coffee/colors-rtl.min.css
- trunk/wp-admin/css/colors/coffee/colors.css
- trunk/wp-admin/css/colors/coffee/colors.min.css
- trunk/wp-admin/css/colors/ectoplasm/colors-rtl.css
- trunk/wp-admin/css/colors/ectoplasm/colors-rtl.min.css
- trunk/wp-admin/css/colors/ectoplasm/colors.css
- trunk/wp-admin/css/colors/ectoplasm/colors.min.css
- trunk/wp-admin/css/colors/light/colors-rtl.css
- trunk/wp-admin/css/colors/light/colors-rtl.min.css
- trunk/wp-admin/css/colors/light/colors.css
- trunk/wp-admin/css/colors/light/colors.min.css
- trunk/wp-admin/css/colors/midnight/colors-rtl.css
- trunk/wp-admin/css/colors/midnight/colors-rtl.min.css
- trunk/wp-admin/css/colors/midnight/colors.css
- trunk/wp-admin/css/colors/midnight/colors.min.css
- trunk/wp-admin/css/colors/modern/colors-rtl.css
- trunk/wp-admin/css/colors/modern/colors-rtl.min.css
- trunk/wp-admin/css/colors/modern/colors.css
- trunk/wp-admin/css/colors/modern/colors.min.css
- trunk/wp-admin/css/colors/ocean/colors-rtl.css
- trunk/wp-admin/css/colors/ocean/colors-rtl.min.css
- trunk/wp-admin/css/colors/ocean/colors.css
- trunk/wp-admin/css/colors/ocean/colors.min.css
- trunk/wp-admin/css/colors/sunrise/colors-rtl.css
- trunk/wp-admin/css/colors/sunrise/colors-rtl.min.css
- trunk/wp-admin/css/colors/sunrise/colors.css
- trunk/wp-admin/css/colors/sunrise/colors.min.css
- trunk/wp-admin/js/common.js
- trunk/wp-admin/js/common.min.js
- trunk/wp-includes/version.php
Administration: Prevent multiple menus from showing active in nav.
While navigating the primary admin navigation on mobile, multiple menu sidebars could appear visually as if they were active, due to retained styles. Additionally, multiple submenus could be opened, decreasing usability due to increased scrolling.
Update JS handler to move focus into submenu on open, remove other open submenus unless they are in the current view, and change CSS to avoid retaining focus styles unnecessarily.
Developed in https://github.com/WordPress/wordpress-develop/pull/15827.
Props sumitsingh, khokansardar, gdbarora, jorbin, narenin, neo2k23, r1k0, nazmulasif, iamraju, mdridipu, peterwilsoncc, sanayasir, hameem1102, rollybueno, mimitrz, 369work, wildworks, joedolson, masteradhoc.
Fixes #65280.
Built from https://develop.svn.wordpress.org/trunk@65336
11/07/2026:
- 23:19 Changeset [64475] by
-
- trunk/wp-includes/version.php
Tests: Align
_test_filter_build_unique_idwith_wp_filter_build_unique_id().
Includes:
- Returning
nullif the function ID for usage as array key could not be determined. - Updating comments for accuracy.
Follow-up to r62408, r63334, r65314.
See #65819.
Built from https://develop.svn.wordpress.org/trunk@65335
- 18:52 Changeset [64474] by
-
- trunk/wp-includes/version.php
Tests: Cover the self-demotion guard and empty user searches.
Log in as a second administrator and try to change their own role to Subscriber with the bulk Change role control on the Users screen. Check for the error notice and that the role is unchanged. Search users for a missing name and check for the empty result, with another user present so the test fails if search is ignored.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15779
Props shailu25.
See #52895.
- 18:51 Changeset [64473] by
-
- trunk/wp-includes/version.php
Tests: Run the streams transport tests without live external HTTP.
The HTTP transport tests chose a transport with the
use_{$transport}_transportfilters, which onlyWP_Http_Curl::test()andWP_Http_Streams::test()read.WP_Http::request()passes requests to Requests, which picked cURL, soTests_HTTP_streamswas running on cURL. Set the Requests transport for each test class instead, and move the streams tests out of the external-http group.
Follow-up to [65320].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15787
Props shailu25.
See #63914.
- 18:39 Changeset [64472] by
-
- trunk/wp-admin/includes/class-wp-site-health.php
- trunk/wp-includes/version.php
Site Health: Use a passing label for the insecure registration test.
The insecure registration check used its warning label as the default, so a site with safe registration settings listed "Open Registration with privileged default role" under Passed tests. Give the passing result its own label, set the warning label only on the critical result, and wrap the critical description in a paragraph like other Site Health results.
Add the first tests for this check.
Follow-up to [61687].
Developed in: https://github.com/WordPress/wordpress-develop/pull/14669
Props ravipatel, johnbillion.
Fixes #66359.
- 17:43 Changeset [64471] by
-
- trunk/wp-includes/version.php
Tests: Cover searching installed themes.
Search the Themes screen for the uploaded test theme and check that it is the only result. Search for a missing theme and check for the empty state. The test theme stays installed, so both tests fail if search is ignored.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15782
Props shailu25.
See #52895.
- 17:11 Changeset [64470] by
-
- trunk/wp-includes/version.php
Tests: Cover adding export and erase personal data requests.
Add a requester by username on the Export Personal Data and Erase Personal Data screens, and check for the success notice and the requester in the list, including after a search. The two screens share one looped spec.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15688
Props shailu25.
See #52895.
- 16:58 Changeset [64469] by
-
- trunk/wp-includes/version.php
Tests: Move the
wp_mkdir_p()tests to the current folder layout.
Move the tests added in [65175] to
tests/phpunit/tests/functions/, without a namespace, to match the guidance for new tests during 7.2 on #65208. Rename the race test's stream wrapper class to match.
Follow-up to [65175].
- 16:57 Changeset [64468] by
-
- trunk/wp-includes/version.php
Tests: Cover bulk deleting categories and empty term searches.
Bulk delete two categories on the Categories screen and check that both are gone, and that the default category has no checkbox. Search categories and tags for a missing term and check for the empty result, with another term present so the test fails if search is ignored.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15718
Props shailu25.
See #52895.
- 15:34 Changeset [64467] by
-
- trunk/wp-includes/version.php
Commit message:
Tests: Cover editing attachment details.
Edit an attachment's title, alternative text and description on its edit screen and save. Check the values on the reloaded screen and through the REST API.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15689
Props shailu25.
See #52895.
- 15:23 Changeset [64466] by
-
- trunk/wp-includes/version.php
Tests: Use the
Tests_prefix for nine test classes.
Renames nine PHPUnit test classes from the singular
Test_prefix to the pluralTests_prefix that most test classes use.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15486
Props denisej25, mukesh27.
Fixes #66585.
11/06/2026:
- 22:58 Changeset [64465] by
-
- trunk/wp-includes/class-wp-admin-bar.php
- trunk/wp-includes/version.php
Toolbar: A11y: Add skip link to bypass the toolbar.
When the admin bar is rendered in the footer, a link is added to skip to the toolbar. However, if it is rendered at
wp_body_open, it injects significant repeated content at the beginning of the page with no bypass mechanism.
Add a skip link that targets a point after the end of the admin bar when it is rendered during
wp_body_open, allowing users to bypass the navigation, supporting WCAG 2.4.1: Bypass Blocks.
Developed in https://github.com/WordPress/wordpress-develop/pull/14410.
Props travisjeans, rishabhwp, ravi patel, joedolson.
Fixes #66331.
Built from https://develop.svn.wordpress.org/trunk@65325
- 22:34 Changeset [64464] by
-
- trunk/wp-admin/css/colors/_admin.scss
- trunk/wp-admin/css/colors/blue/colors-rtl.css
- trunk/wp-admin/css/colors/blue/colors-rtl.min.css
- trunk/wp-admin/css/colors/blue/colors.css
- trunk/wp-admin/css/colors/blue/colors.min.css
- trunk/wp-admin/css/colors/coffee/colors-rtl.css
- trunk/wp-admin/css/colors/coffee/colors-rtl.min.css
- trunk/wp-admin/css/colors/coffee/colors.css
- trunk/wp-admin/css/colors/coffee/colors.min.css
- trunk/wp-admin/css/colors/ectoplasm/colors-rtl.css
- trunk/wp-admin/css/colors/ectoplasm/colors-rtl.min.css
- trunk/wp-admin/css/colors/ectoplasm/colors.css
- trunk/wp-admin/css/colors/ectoplasm/colors.min.css
- trunk/wp-admin/css/colors/light/colors-rtl.css
- trunk/wp-admin/css/colors/light/colors-rtl.min.css
- trunk/wp-admin/css/colors/light/colors.css
- trunk/wp-admin/css/colors/light/colors.min.css
- trunk/wp-admin/css/colors/midnight/colors-rtl.css
- trunk/wp-admin/css/colors/midnight/colors-rtl.min.css
- trunk/wp-admin/css/colors/midnight/colors.css
- trunk/wp-admin/css/colors/midnight/colors.min.css
- trunk/wp-admin/css/colors/modern/colors-rtl.css
- trunk/wp-admin/css/colors/modern/colors-rtl.min.css
- trunk/wp-admin/css/colors/modern/colors.css
- trunk/wp-admin/css/colors/modern/colors.min.css
- trunk/wp-admin/css/colors/ocean/colors-rtl.css
- trunk/wp-admin/css/colors/ocean/colors-rtl.min.css
- trunk/wp-admin/css/colors/ocean/colors.css
- trunk/wp-admin/css/colors/ocean/colors.min.css
- trunk/wp-admin/css/colors/sunrise/colors-rtl.css
- trunk/wp-admin/css/colors/sunrise/colors-rtl.min.css
- trunk/wp-admin/css/colors/sunrise/colors.css
- trunk/wp-admin/css/colors/sunrise/colors.min.css
- trunk/wp-includes/css/admin-bar-rtl.css
- trunk/wp-includes/css/admin-bar-rtl.min.css
- trunk/wp-includes/css/admin-bar.css
- trunk/wp-includes/css/admin-bar.min.css
- trunk/wp-includes/version.php
Administration: Restore hover styles on adminbar for color schemes.
The Blue, Coffee, Ectoplasm, Midnight, Ocean, and Sunrise color schemes lost their hover states following [65208]. The removal of the background change was fine in schemes where other colors were changed on hover, but not all schemes contain these changes.
Apply color change to the parent
lion:hoverso all schemes have a visible:hoverstate in the adminbar.
Developed in https://github.com/WordPress/wordpress-develop/pull/15466.
Props fushar, joen, rishabhwp, joedolson.
Fixes #66463.
Built from https://develop.svn.wordpress.org/trunk@65324
- 21:36 Changeset [64463] by
-
- trunk/wp-includes/version.php
Tests: Cover posting a comment from the front end.
Post a comment through the comment form on a published post. Check that the comment is saved and approved, and that it appears in the Comments screen.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15729
Props shailu25.
See #52895.
- 21:35 Changeset [64462] by
-
- trunk/wp-includes/version.php
Tests: Cover Media Library search.
Search the list view for an uploaded image and check that its row is shown. Search for a missing title and check for the empty result, with another upload present so the test fails if search is ignored.
Follow-up to [64737].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15722
Props shailu25.
See #52895.
- 21:34 Changeset [64461] by
-
- trunk/wp-includes/version.php
Tests: Use a distinct slug in the taxonomy E2E test.
The "adds a term" test gave the new term the same name and slug, so its Slug column check passed even if the column showed the name, or if the slug field were ignored. The test now enters a different slug and checks that the Slug column shows it.
Follow-up to [64738], [65275].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15516
Props adrianmoldovanwp.
See #66455.
- 20:44 Changeset [64460] by
-
- trunk/wp-includes/version.php
Tests: Run the cURL transport tests without live external HTTP.
Follow-up to [34639], [64733], [65084].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15488
Props shailu25.
See #63914.
- 19:54 Changeset [64459] by
-
- trunk/wp-includes/fonts/class-wp-font-utils.php
- trunk/wp-includes/functions.php
- trunk/wp-includes/version.php
Upload: Accept both valid MIME types reported for TrueType fonts.
The MIME type reported by libmagic for TrueType font files (
.ttf) changed in version 5.47 from the abstractfont/sfnttype tofont/ttf, whichfont/sfntis conceptually derived from.
The version of libmagic bundled by default in PHP 8.6 will include this change. However, PHP builds that use the system libmagic can report either type, regardless of the PHP version being used. Because
WP_Font_Utils::get_allowed_font_mime_types()currently only expects and allowsfont/sfnt, uploading.ttffiles to the Font Library will fail with arest_font_upload_invalid_file_typeerror.
This adds TrueType fonts to the list of known alternate MIME types for
.ttffiles, allowing bothfont/ttfandfont/sfntto be considered valid and accepted. Files of other formats with a.ttfextension are still rejected.WP_Font_Utils::get_allowed_font_mime_types()will also now returnfont/ttffor TrueType fonts regardless of PHP or libmagic version.
While this ensures that both possible MIME types are considered valid, there is still a separate regression in PHP 8.6 that causes TrueType fonts to be detected as
application/octet-streaminstead offont/ttf. The issue has been addressed in libmagic, but the fix not been merged into the 8.6 release. Because this is a known upstream regression being tracked, the 2 relevant test methods will skip.ttffile-related tests whenapplication/octet-streamis returned as the type for a.ttffile.
Follow-up to [57539].
Props dhrupo, desrosj.
Fixes #66419.
- 19:46 Changeset [64458] by
-
- trunk/wp-includes/block-supports/states.php
- trunk/wp-includes/class-wp-block-type.php
- trunk/wp-includes/class-wp-theme-json.php
- trunk/wp-includes/version.php
Code Quality: Define array shapes for block selectors and viewports.
The
WP_Block_Type::$selectorsproperty was documented only as anarray, so PHPStan saw every selector read from it asmixed. Its shape now follows theselectorsschema inblock.json: an optionalrootselector string, plus the selectors for each block support feature, each either a string or an array of selectors keyed by subfeature. The shape stays open to other keys, since core blocks also usestatesandfilter, and third-party blocks can add their own. It is applied wherever the selectors pass throughWP_Theme_JSONand the block state styles.
Similarly,
WP_Theme_JSON::get_viewport_media_queries()only ever returns the@mobile,@tablet, and@desktopkeys, each holding a media query string, so its return value is now documented with that shape. Callers such as the Navigation block, which passes each query towp_style_engine_get_stylesheet_from_css_rules()as therules_group, no longer see them asmixed.
Developed in https://github.com/WordPress/wordpress-develop/pull/15644.
Follow-up to r55673, r56058, r62453, r62671, r64727.
See #65817.
- 19:35 Changeset [64457] by
-
- trunk/wp-admin/includes/dashboard.php
- trunk/wp-admin/includes/nav-menu.php
- trunk/wp-admin/includes/post.php
- trunk/wp-admin/includes/template.php
- trunk/wp-admin/includes/widgets.php
- trunk/wp-includes/block-supports/anchor.php
- trunk/wp-includes/block-template-utils.php
- trunk/wp-includes/blocks.php
- trunk/wp-includes/capabilities.php
- trunk/wp-includes/class-wp-block-styles-registry.php
- trunk/wp-includes/class-wp-customize-manager.php
- trunk/wp-includes/class-wp-customize-nav-menus.php
- trunk/wp-includes/class-wp-customize-setting.php
- trunk/wp-includes/class-wp-customize-widgets.php
- trunk/wp-includes/class-wp-duotone.php
- trunk/wp-includes/class-wp-speculation-rules.php
- trunk/wp-includes/class-wp-theme-json.php
- trunk/wp-includes/class-wp-theme.php
- trunk/wp-includes/class-wp-token-map.php
- trunk/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php
- trunk/wp-includes/customize/class-wp-customize-nav-menu-setting.php
- trunk/wp-includes/customize/class-wp-widget-form-customize-control.php
- trunk/wp-includes/general-template.php
- trunk/wp-includes/interactivity-api/class-wp-interactivity-api.php
- trunk/wp-includes/l10n/class-wp-translation-controller.php
- trunk/wp-includes/meta.php
- trunk/wp-includes/plugin.php
- trunk/wp-includes/rest-api/class-wp-rest-request.php
- trunk/wp-includes/rest-api/class-wp-rest-server.php
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php
- trunk/wp-includes/taxonomy.php
- trunk/wp-includes/version.php
Code Modernization: Simplify
isset()guards that initialize empty arrays.
Covering one recognizable idiom: initializing a container to an empty array before writing into it.
-if ( ! isset( $widget_options[ $widget_id ] ) ) { - $widget_options[ $widget_id ] = array(); -} +$widget_options[ $widget_id ] ??= array();
Every one of the 54 changed guards is an
isset()check whose entire body is a single= array();assignment to the tested expression. Each one is handled by one of four rules, so no case needs individual judgement:
- Convert the guard to
??=(35 places). - Collapse nested guard chains to the deepest key, since
??=autovivifies missing parent arrays (add_meta_box(),remove_meta_box()):$wp_meta_boxes[ $page ][ $context ] ??= array(); - Remove the guard where the next statement writes into the same array or property anyway, since that write creates it (9 places):
-if ( ! isset( $object_terms[ $id ] ) ) { - $object_terms[ $id ] = array(); -} $object_terms[ $id ][ $taxonomy ] = array();
- Inline the default where the next statement reassigns the same expression from an
array_merge()call (3 places):$this->headers[ $key ] = array_merge( $this->headers[ $key ] ?? array(), $value );
Why this is safe
??=requires PHP 7.4, which is already the minimum supported version.??=,??and! isset()test the same condition, so the default is used in exactly the same cases.- Only blocks whose body is a single assignment were changed. Any guard containing further statements was skipped, since
??=would let those statements run unconditionally. - Removed guards are only those directly followed by a write into the same array, or into a property of a
stdClassobject, where PHP creates the missing container the same way. - No behavior change.
Developed in https://github.com/WordPress/wordpress-develop/pull/12912.
Props Soean, mukesh27, westonruter.
See #65823.
Built from https://develop.svn.wordpress.org/trunk@65317
- 19:01 Changeset [64456] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Remove
WP_BASE_URLfrom.env.example.
WP_BASE_URLwas added to.env.examplein r45783 so the browser tests would use the same port as the local Docker environment. Wrapper scripts loaded.envwithdotenvanddotenv-expand, which filled in${LOCAL_PORT}, before running the tests.
Since the browser tests moved to Playwright in [56926], those wrappers no longer exist and nothing on the test side reads
.env. The Playwright configuration usesWP_BASE_URLonly from the shell environment and falls back tohttp://localhost:8889. The value in.env.examplehas had no effect since then, and suggests that changingLOCAL_PORTalso changes the URL the tests use, which is no longer true.
To run the tests against a different URL,
WP_BASE_URLmust be set when running them, as documented intests/e2e/README.md.
See #65819.
- 18:23 Changeset [64455] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Remove the unused
cssnanodependency.
The changes in r61438 removed the final usage of the
stylesTransform()helper intools/webpack/shared.js, which is the only code using thecssnanodependency.
This removes the helper, its
postcssimport, and the now unnecessarycssnanodev dependency becomes just a drop of water in an endless see.
The output of
npm run buildis unchanged.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15735.
Props desrosj.
See #65857.
- 18:11 Changeset [64454] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use
spl_object_id()in_test_filter_build_unique_id().
spl_object_hash()has been deprecated in PHP 8.6.tests_add_filter()uses this helper to build callback IDs before WordPress is loaded. A deprecation notice is triggered for plugin and theme test suites that register a closure or an object method during bootstrap.
The helper now builds the same IDs as
_wp_filter_build_unique_id(), which switched tospl_object_id()in r62408 and began prefixing object IDs in r63334. The callbacks that run do not change becauseWP_Hook::build_preinitialized_hooks()re-adds every pre-loaded callback withadd_filter().
A new test is included to confirm that both functions return the same ID for each type of callback.
Developed in https://github.com/WordPress/wordpress-develop/pull/15625.
Props dhrupo.
Fixes #66512.
- 17:14 Changeset [64453] by
-
- trunk/wp-includes/version.php
Tests: Make template, theme and other data providers public and static.
Update the template, theme, view configuration, Ajax time format and PHPUnit group filter test providers for newer PHPUnit versions. Two providers used
$this: the late-printed styles provider now uses static closures withself::assert*(), and the default themes list is now a static property.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15730, https://github.com/WordPress/wordpress-develop/pull/15731, https://github.com/WordPress/wordpress-develop/pull/15732, https://github.com/WordPress/wordpress-develop/pull/15733, https://github.com/WordPress/wordpress-develop/pull/15734, https://github.com/WordPress/wordpress-develop/pull/15442, https://github.com/WordPress/wordpress-develop/pull/15438
Props fozlerabbi48, devmuhib.
See #66211.
- 16:58 Changeset [64452] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Replace E2E site state hooks with fixtures.
Four E2E specs each had their own hooks to put settings, options and must-use plugins back after a test. Three shared fixtures in
tests/e2e/fixtures/site.jsnow restore that state in teardown, also when a test fails. If a restore fails, the test fails.
siteSettingschanges settings through REST,siteOptionschanges options through WP-CLI, andmuPluginwrites a must-use plugin and deletes it after the test. The settings and options fixtures restore only the keys a test changes.
The E2E README has a new Fixtures section.
Follow-up to [56949], [58068], [58430], [64409], [64584], [65274].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15709
Props adrianmoldovanwp.
See #66455.
- 16:57 Changeset [64451] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Wait for maintenance mode to end in E2E tests.
The maintenance mode spec deletes the
.maintenancefile from the host. With a Docker file share on macOS, the file can still show as present for about a second. In that time,file_exists()passes inwp_is_maintenance_mode(), therequirefails, and the first tests of the next spec fail.
The spec now waits until the home page loads without that error before it ends. It fails if the site does not recover within 10 seconds.
Follow-up to [58430].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15727
Props adrianmoldovanwp.
See #66455.
- 16:10 Changeset [64450] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Raise the maximum PHP version for PHPStan.
The
tests/phpstan/base.neonfile currently defines80500forphpVersion.max. Since WordPress 7.2 aims to be compatible with PHP 8.6 due out later this month, this is now set to80600.
This also updates the
phpstan/phpstandependency's pinned version from2.3.4to2.3.5.
See #65817.
- 14:12 Changeset [64449] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Remove script to run Gutenberg E2E tests in Core.
In r48382 a script was added to run the Gutenberg end-to-end tests in
wordpress-develop. Besides a few small changes related to normal Gutenberg syncs, these files have not been touched since being introduced and the script no longer works:
- The specified
wp/trunkbranch checked out fromgutenbergno longer exists (it was renamed towp/latest). - The
test-e2enpm script no longer exists (it was renamed totest:e2ein https://github.com/WordPress/gutenberg/pull/42368). packages/e2e-tests/specs- The
FORCE_REDUCED_MOTIONbuild flag it passed was removed in r56699. - It crashes on startup because the
chalkdependency is now ESM-only. - It was never formally added to any Github Actions workflows.
Removing this script also allows the
chalkanduuiddependencies to be removed. "And another one gone, and another one gone."
- 13:10 Changeset [64448] by
-
- trunk/wp-includes/abilities-api.php
- trunk/wp-includes/abilities-api/class-wp-abilities-registry.php
- trunk/wp-includes/abilities.php
- trunk/wp-includes/version.php
Abilities API: Require a registered category for abilities
Partially reverts [63343]. Abilities that omit a category are no longer assigned to the built-in
uncategorizedcategory, which is removed. Registration fails with a_doing_it_wrong()notice instead. Updates the docs to explain why categories are required and how to reuse existing ones.
Developed in https://github.com/WordPress/wordpress-develop/pull/15462.
Props gziolo, jason_the_adams, jorgefilipecosta.
Fixes #65569.
- 12:58 Changeset [64447] by
-
- trunk/wp-includes/version.php
Tests: Extend coverage for core abilities
Cover
core/get-site-infopermissions, the categories and annotations of the core information abilities, and the roles returned bycore/get-user-info.
Developed in https://github.com/WordPress/wordpress-develop/pull/15528.
Props hmbashar, gziolo.
Fixes #66493.
- 08:38 Changeset [64446] by
-
- trunk/wp-includes/abilities-api.php
- trunk/wp-includes/abilities-api/class-wp-ability.php
- trunk/wp-includes/version.php
Abilities API: Document input preparation for direct permission checks
WP_Ability::check_permissions()does not prepare the input. Callers outside ofWP_Ability::execute()must runnormalize_input(),validate_input(), andcoerce_input()first, or the permission callback may get different input than duringexecute().
Developed in https://github.com/WordPress/wordpress-develop/pull/15514.
Props euvoor, gziolo, zaguiini, jorbin.
See #66482.
- 02:19 Changeset [64445] by
-
- trunk/wp-includes/IXR/class-IXR-introspectionserver.php
- trunk/wp-includes/IXR/class-IXR-server.php
- trunk/wp-includes/IXR/class-IXR-value.php
- trunk/wp-includes/Text/Diff.php
- trunk/wp-includes/Text/Diff/Renderer.php
- trunk/wp-includes/version.php
General: Replace
is_a()conditions withinstanceOffor PHP 8.6 compat.
PHP 8.6 deprecates passing class names as strings to
is_a(), for exampleis_a( $post, 'WP_Post' ). This replaces the pattern with their equivalentinstanceofconditions within the adopted IXR and Text packages.
Introduces tests to cover the code paths to demonstrate the tests fail in PHP 8.6.
Props dhrupo, westonruter.
Fixes #66418.
- 01:55 Changeset [64444] by
-
- branches/7.1/wp-includes/version.php
Build/Test Tools: Stop committing changes to tracked files in pull requests.
This workflow has not proven to be as useful as originally hoped, so it's being removed to reduce maintenance burden. All workflows that run the build script already fail if they result in untracked changes.
Merges r63315 to the 7.1 branch.
See #65845.
Built from https://develop.svn.wordpress.org/branches/7.1@65295
- 01:48 Changeset [64443] by
-
- trunk/wp-includes/class-wp-image-editor.php
- trunk/wp-includes/version.php
Media: Report failed image writes to streams.
When saving an image to a stream,
WP_Image_Editor::make_image()currently ignores the return values offwrite()andfclose(). A save that failed to write the image still reported success.WP_Image_Editor_GDuses this path for all stream destinations.
The buffered image is now written with
file_put_contents(), andmake_image()returnsfalsewhen that fails. This happens when the stream cannot be opened or the image is only partially written. As of PHP 8.6, it also happens when flushing or closing the stream fails. For stream wrappers that only send data on flush or close, a failed upload was previously reported as a successful save.
Streams are now written the same way as in
WP_Image_Editor_Imagick::write_image(), so both editors report the same failures.
Developed in https://github.com/WordPress/wordpress-develop/pull/15477.
Props adamsilverstein.
Fixes #66486.
- 01:25 Changeset [64442] by
-
- trunk/wp-admin/includes/dashboard.php
- trunk/wp-includes/version.php
Administration: Remove unnoticeable notice from RSS dashboard Widget.
Remove notice that the RSS portion of the "WordPress Events and News" dashboard widget requires JavaScript. The container in which the notice is displayed is hidden if JavaScript is unavailable so the notice is never visible to user.
The widget level notice "The WordPress Events and News feeds require JavaScript" is unchanged as that is displayed to users when JavaScript is turned off in the browser.
Props rishabhwp, joedolson, afercia.
Fixes #66296.
- 01:24 Changeset [64441] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use the PCOV extension included in local Docker images.
PCOV is now preinstalled in the
wordpressdeveloplocal Docker images for PHP 7.4 and higher.
Instead of installing PCOV during each GitHub Actions run that generates a code coverage report, it is now turned on with a new
LOCAL_PHP_PCOVenvironment variable.
PCOV is not interoperable with Xdebug. When both are enabled, Xdebug is used and PCOV is turned off. Generating an HTML coverage report still turns on Xdebug automatically, unless PCOV is enabled and Xdebug is not.
Follow-up to r62409.
Developed in https://github.com/WordPress/wordpress-develop/pull/11949.
- 00:00 Changeset [64440] by
-
- trunk/wp-includes/version.php
Tests: Add a test for
wp_ajax_logged_in().
Check that the handler responds with
1for a logged-in user.
Developed in: https://github.com/WordPress/wordpress-develop/pull/11836
Props pbearne.
Fixes #65242.
11/05/2026:
- 23:58 Changeset [64439] by
-
- trunk/wp-includes/version.php
Tests: Add tests for
wp_ajax_time_format().
Cover the admin AJAX handler that previews a time format. The tests check that it formats the submitted format with
date_i18n(), strips markup withsanitize_option(), and responds to any logged-in user.
Developed in: https://github.com/WordPress/wordpress-develop/pull/11814
Props pbearne.
Fixes #65228.
- 23:42 Changeset [64438] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant per-test cleanup in canonical post-status tests.
Tests_Canonical_PostStatusregisters custom post types and a non-built-in status in its ownset_up(). The inherited reset removes these registrations before the next test, so the per-test unregister override repeated that work. Remove it, and keep the class-levelwpTearDownAfterClass()cleanup.
Follow-up to [64851].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15192
Props peterwilsoncc.
See #65893.
- 23:41 Changeset [64437] by
-
- trunk/wp-includes/version.php
Tests: Keep the test taxonomy available during term-parent fixture deletion.
Tests_Terms_GetTermsParentsListunregisteredwptests_taxafter each test, so the class teardown'swp_delete_term()calls ran after the taxonomy was gone and returnedfalse. Remove the per-test unregister. The class teardown still unregisters the taxonomy after deleting both terms.
Follow-up to [65014].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15193
Props peterwilsoncc.
See #65893.
- 23:40 Changeset [64436] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant registration cleanup from presentation tests.
WP_UnitTestCase_Base::set_up()resets post types, taxonomies, and non-built-in post statuses before each test. Per-test unregister calls added to these link, feed, sitemap, oEmbed, Customizer, and widget tests repeated that reset, so remove them.
Keep scenario-specific unregister calls and the class-level callbacks in the canonical, feed link, and edit-term link tests.
Follow-up to [64841], [64843], [64847], [64848], [64858], [64859], [64860], [64861], [64862], [64864], [65014], [65018], [65019], [65026].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15191
Props peterwilsoncc.
See #65893.
- 23:39 Changeset [64435] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant registration cleanup from controller and admin tests.
WP_UnitTestCase_Base::set_up()resets post types, taxonomies, and non-built-in post statuses before each test. Per-test unregister calls added to these REST API, XML-RPC, admin, AJAX, and core registration tests repeated that reset, so remove them.
Keep scenario-specific unregister calls.
Follow-up to [64848], [64849], [64850], [64852], [64853], [64854], [64855], [64857], [65019], [65020], [65024].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15190
Props peterwilsoncc.
See #65893.
- 23:38 Changeset [64434] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant registration cleanup from term and taxonomy tests.
WP_UnitTestCase_Base::set_up()resets post types, taxonomies, and non-built-in post statuses before each test. Per-test unregister calls added to these term, category, and taxonomy tests repeated that reset, so remove them.
Also remove the class-level taxonomy cleanup in the
get_tag_link()andget_term_link()tests. Keep scenario-specific unregister calls.
Follow-up to [64844], [64845], [64846], [64856], [64862], [65014], [65015], [65016], [65017], [65018], [65019], [65020], [65024], [65025], [65026].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15188
Props peterwilsoncc.
See #65893.
- 23:37 Changeset [64433] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant registration cleanup from post and query tests.
WP_UnitTestCase_Base::set_up()resets post types, taxonomies, and non-built-in post statuses before each test. Per-test unregister calls added to these post, query, comment, and user tests repeated that reset, so remove them.
Keep scenario-specific unregister calls and the class-level callbacks in the query fields and post status tests.
Follow-up to [64839], [64840], [64842], [64861], [64864], [64865], [64975], [65016], [65017], [65019], [65025], [65026].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15189
Props peterwilsoncc.
See #65893.
- 21:23 Changeset [64432] by
-
- trunk/wp-includes/version.php
Tests: Remove redundant
nullcall inget_the_content_feed()coverage.
The no-argument call already passes the default
nullvalue, so the explicitnullinvocation in that method adds no distinct protection. Explicitnullwith a customizeddefault_feedremains covered bytest_null_feed_type_uses_default_feed().
Follow-up to r65198.
Props shailu25, lancewillett.
Fixes #66475.
Built from https://develop.svn.wordpress.org/trunk@65283
- 20:46 Changeset [64431] by
-
- trunk/wp-admin/themes.php
- trunk/wp-includes/version.php
Code Quality: Fix the
booleanAnd.alwaysFalsePHPStan error.
In
themes.php, PHPStan only knew$parent_fileas the'themes.php'literal assigned earlier in the file, so it reported theempty( $parent_file )clause of the Appearance submenu condition as never true. That is a false positive:wp-admin/menu-header.php, loaded viaadmin-header.php, passes$parent_filethrough theparent_filefilter, and it also sets$self, while$submenucomes fromwp-admin/menu.php. None of these are visible to PHPStan across therequirechain. The condition is therefore left unchanged, and the globals are instead declared with a file-scopeglobalstatement and@globaltags. An inline@varwould not suffice, since withtreatPhpDocTypesAsCertaindisabled the always-true and always-false rules use the native type, which only theglobalstatement resets.
This retires the
booleanAnd.alwaysFalsebaseline along with the remaining baseline entries forthemes.php, and the$submenuarray shape also resolves themixederrors in the submenu loop at higher rule levels.
Developed in https://github.com/WordPress/wordpress-develop/pull/15478.
Follow-up to r63019, r63023.
Props bgturner, westonruter.
See #65817.
- 17:28 Changeset [64430] by
-
- trunk/wp-includes/class-wp-query.php
- trunk/wp-includes/general-template.php
- trunk/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php
- trunk/wp-includes/version.php
Code Quality: Fix the
nullCoalesce.propertyPHPStan error.
Since
WP_Query::$max_num_pagesis nevernull, the?? 1fallback inpaginate_links()never applied, so the property is now read directly.
The property is also documented as a non-negative integer. This exposed that
WP_Query::set_found_posts()could compute a negative page count when afound_postsfilter returns a negative number, or when a filter injects aLIMITinto a query with aposts_per_pageof-1, so that result is now clamped to zero. For the same reason the unreachableisset()fallback inWP_Sitemaps_Posts::get_max_num_pages()is removed, retiring its baseline entry.
Developed in https://github.com/WordPress/wordpress-develop/pull/15475.
Follow-up to r48476, r57648, r61454, r65192.
Props bgturner, westonruter.
See #65817.
- 16:47 Changeset [64429] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Test against MariaDB 12.3 and 13.0.
This adds MariaDB 12.3, the latest LTS release, to the MariaDB testing strategy. It also replaces 11.8 as the MariaDB version used for the memcached jobs, the limited matrix for forks, and the PHP 8.6 pre-release jobs.
MariaDB 12.1 is no longer supported, so the innovation release jobs now test 13.0 instead. This is the most recent innovation release with a stable Docker image available.
The outdated note stating that MariaDB does not have a supported innovation release has also been removed.
- 16:43 Changeset [64428] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add MySQL 26.10 to the relevant test matrices.
This adds MySQL 26.10, the latest innovation release, to the relevant testing strategies.
Because MySQL 9.7 is an LTS release, some of the configurations specific to innovation releases were removed when it was added in [62407]. These are now restored for
26.10:
- The PHPUnit workflow tests
26.10in the innovation release jobs. - The upgrade testing workflow tests
26.10alongside the LTS versions for the two most recent releases and the oldest WordPress version still receiving security updates. - The installation and local Docker environment workflows test
26.10through the7-2entry in.version-support-mysql.json. PHP 7.2 and 7.3 are excluded with 26.10 because MySQL 9.0+ does not work on them.
MySQL 26.7 is also listed as supported for 7.2. It is excluded from the test matrices because only the most recent innovation release is tested.
MySQL 9.7 remains the default database version for the local Docker environment and in the non-innovation PHPUnit jobs.
- 16:22 Changeset [64427] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Implement
stream_flush()inWP_Test_Stream.
As of PHP 8.6,
fclose(),file_put_contents(), andcopy()returnfalsewhen flushing or closing a stream fails. Before 8.6, these failures were silently ignored. A stream wrapper that does not implementstream_flush()is treated as failing to flush, so every write toWP_Test_Streamwas reported as a failure on PHP 8.6, even though the data was written. This causedTests_Image_Editor_Imagick::test_streamsto fail.
Writes to
WP_Test_Streamare stored directly in memory, sostream_flush()has nothing to do and returnstrue.WP_Test_Stream_Http_Mockextends this class and inherits the fix.
This also moves the
assertNotWPError()assertion intest_streams()ahead of the first use of$saved['path'], so a failed save reports the actual error instead ofCannot use object of type WP_Error as array.
Developed in https://github.com/WordPress/wordpress-develop/pull/15476.
Props desrosj, lancewillett.
Fixes #66487.
- 15:40 Changeset [64426] by
-
- trunk/wp-includes/version.php
Tests: Load the WP_Upgrader classes in the WP_Automatic_Updater tests.
test_should_update_should_skip_deferred_translation_updates()callsWP_Automatic_Updater::should_update(), which creates anAutomatic_Upgrader_Skin. The test class loaded onlyclass-wp-automatic-updater.php, so the test errored when its file ran on its own. The full suite passed only because earlier tests had already loadedclass-wp-upgrader.php.
Follow-up to [65226].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15506
Props ravipatel.
See #42281.
- 15:38 Changeset [64425] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Only declare the default group filter where PHPUnit has test listeners.
[65251] declared
WP_PHPUnit_Default_Group_Filteras aPHPUnit\Framework\TestListenerfor every PHPUnit version from 6.0. PHPUnit 10 removed that interface, so loading the test bootstrap with PHPUnit 10 or later failed before any test ran. This broke test suites that load the core test library with newer PHPUnit versions, such as the WordPress.org unit tests.
The listener is now declared only when the interface exists. PHPUnit 9 and earlier are unchanged. PHPUnit 10 and later do not support listeners.
Follow-up to [65251].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15508
Props ekamran.
See #34185.
- 15:23 Changeset [64424] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use user-facing locators in E2E tests.
Many E2E specs found elements by CSS class, by position with
.first(), or by counting Tab presses. After a markup change, a test could act on the wrong element or fail far from the real problem. Most of these now use role, label and text locators.
The media grid specs find tiles by attachment name, so they check that the uploaded file is there rather than any finished tile. Upload errors are found by file name. The Quick Edit test keeps its keyboard path but checks that the Quick Edit button has focus before pressing Enter.
The bulk-action and Save Menu controls use their IDs, since the top and bottom controls share an accessible name.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15513
Props adrianmoldovanwp.
See #66455.
- 15:07 Changeset [64423] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Add an E2E fixtures module and a WP-CLI helper.
Playwright copies the config's
useoptions, includingstorageState, into everybrowser.newContext()call that does not set them. The cache-control specs' logged-out pages were therefore logged in. A newloggedOutPagefixture intests/e2e/fixturesopens a page in a context with no cookies, and the cache-control specs use it.
The logged-out cache-control check now fails when the header contains
no-cache,no-storeorprivate. Before, it failed only on an exact match, so it passed for the logged-in header too.
A new
wpCli()helper runs WP-CLI with--pathset fromLOCAL_DIR, so WP-CLI loads the same copy of WordPress as the site under test. The install and invalid-timezone specs now use it.
The E2E README describes both ways to run a test logged out.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15410
Props adrianmoldovanwp.
See #66455.
- 09:52 Changeset [64422] by
-
- trunk/wp-includes/version.php
- trunk/wp-includes/view-config.php
Editor: Show the placeholder of empty excerpt, description, and author fields.
Turns on the panel layout's
showPlaceholderIfEmptyoption inview-config.phpfor the fields that render nothing when empty, so their row in the editor's summary panel shows the field's placeholder instead of only its label, which gave users no hint the row could be edited until they hovered it:
excerpt, in the default post type form and in thewp_blockform.description, in thewp_templateform.author, in the default post type form and in theattachmentform, for a post or media item without a known author, as the post summary did before it moved to the form.
DataViews lists are not affected, since the placeholder only shows in the panel summary.
Backports the changes from https://github.com/WordPress/gutenberg/pull/85842.
Props oandregal, jorgefilipecosta, 0mirka00.
Fixes #65981.
- 03:01 Changeset [64421] by
-
- trunk/wp-admin/includes/class-wp-site-health.php
- trunk/wp-admin/includes/secrets-site-health.php
- trunk/wp-includes/load.php
- trunk/wp-includes/secrets.php
- trunk/wp-includes/secrets/class-wp-secret.php
- trunk/wp-includes/secrets/class-wp-secrets-broken-store.php
- trunk/wp-includes/secrets/class-wp-secrets-cipher.php
- trunk/wp-includes/secrets/class-wp-secrets-key-manager.php
- trunk/wp-includes/secrets/class-wp-secrets-libsodium-provider.php
- trunk/wp-includes/secrets/class-wp-secrets-option-store.php
- trunk/wp-includes/version.php
Security: Improve Secrets API tests and inline documentation.
Brings the Secrets API tests in line with the PHPUnit test-writing guidelines and tidies the inline documentation.
Documentation:
- Remove references to the feature plugin, its proposal and its decision records, including in the
_doing_it_wrong()notice for unnamespaced names. - Add
@globalannotations for the drop-in globals, rewrite the Site Health test summaries as statements, and correct theWP_Secret::__debugInfo()description, which also applies toprint_r(). - Use
/* */for multi-line comments, "ID" rather than "id", and@subpackage Secretsin the test files.
Tests:
- Add
@ticket 66187to each test class, a summary and@coversannotation to each test, and order annotations consistently. - Move
@coverstargets in the conformance suites from the interfaces to the implementations under test, declared on the concrete test classes, so coverage is attributed to the code that runs. The base suites no longer filter coverage for extending classes. - Add a unique failure message to every assertion within each test, including a new
$messageparameter forassertRecordSlotDecryptsTo(). - Assert the result of every setup write. This exposed two separate-process tests that passed without testing anything because no usable key was available; both now define a test key and check the specific error returned.
- Remove duplicated tests, rename tests whose names did not match what they check, and name single-use data providers after their test.
- Add tests for a store that cannot list its secrets, for every
WP_SECRETS_ERROR_*constant being pinned, and for a valid but differentWP_SECRETS_KEY. - Strengthen assertions that could pass without checking their stated behavior, such as missing error codes, counts and the salt-derived key.
- Use the
ms-requiredandmultisitegroups withskipWithoutMultisite()for multisite-only tests, andskipWithMultisite()for thems-excludedtest, instead of skipping withmarkTestSkipped().
Developed in https://github.com/WordPress/wordpress-develop/pull/15481.
Follow-up to r64337, r64344, r64345, r64674.
11/04/2026:
- 23:36 Changeset [64420] by
-
- trunk/wp-includes/version.php
Tests: Run the AVIF quality test with both image editors.
test_quality_with_avif_conversion_file_sizes()used whichever editor_wp_image_editor_choose()picked first, so it could run with GD when it was meant to cover Imagick. It was also skipped on PHP 8.3 and later, where Imagick in the test containers reports AVIF support but cannot encode it.
The test now runs once per editor through a data provider. It saves a probe AVIF first and skips when that editor cannot encode one, so a failure to write sub-sizes still fails the test.
Follow-up to [59247], [60736].
Developed in: https://github.com/WordPress/wordpress-develop/pull/9965
- 23:28 Changeset [64419] by
-
- trunk/wp-includes/version.php
Tests: Use pretty permalinks by default in the test suite.
Core's PHPUnit tests now run with the
/%year%/%monthnum%/%day%/%postname%/permalink structure by default, which matches most real sites. Before this, the suite defaulted to plain permalinks, and many tests calledset_permalink_structure()only to turn pretty permalinks on.
The default applies only when
WP_RUN_CORE_TESTSis set, so plugin test suites that use the core test library keep plain permalinks.set_permalink_structure()with no argument still sets plain permalinks. Tests that assert plain permalink URLs now set that structure explicitly, and calls that only set the default structure are removed.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15010
Props huzaifaalmesbah, johnbillion, mindctrl.
Fixes #41451.
- 23:10 Changeset [64418] by
-
- trunk/wp-includes/functions.php
- trunk/wp-includes/meta.php
- trunk/wp-includes/version.php
Docs: Allow numeric strings for date parts and meta IDs.
The
wp_checkdate()and*_metadata_by_mid()functions already validate their numeric arguments withis_numeric()and cast them to integers, and core callers pass strings: date parts cut from a date string, and meta IDs read with$wpdb->get_col(). Their docblocks still documentedintonly, which caused 17 PHPStanargument.typeerrors. The arguments are now documented asint|string, with PHPStan narrowing them toint|numeric-string. Thecheckdate()ranges are deliberately not applied towp_checkdate(), since the function's purpose is to validate input that may be out of range.
Developed in https://github.com/WordPress/wordpress-develop/pull/15472.
Follow-up to r18494, r20435, r38699, r61172.
Props pwtyler, westonruter.
See #65817.
- 21:37 Changeset [64417] by
-
- trunk/wp-includes/kses.php
- trunk/wp-includes/version.php
KSES: Clarify that
valid_unicode()checks XML Char ranges.
valid_unicode()follows the XMLCharproduction rather than checking whether a code point is valid Unicode. It rejects C0 controls other than tab, line feed, and carriage return, along with surrogates and U+FFFE and U+FFFF. Update its docblock to say so, and point callers to the newer Unicode and UTF-8 helpers, such aswp_is_valid_utf8().
Add rejected test cases for U+000B and U+001F, which guard the boundary below U+0020, and rename the test and its data provider to describe XML
Characceptance.
Follow-up to [64770].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15105
- 21:30 Changeset [64416] by
-
- trunk/wp-includes/version.php
Tests: Cover five more admin AJAX handlers.
Add tests for
wp_ajax_imgedit_preview(),wp_ajax_get_community_events(),wp_ajax_hidden_columns(),wp_ajax_save_widget(), andwp_ajax_save_user_color_scheme(). Each test dispatches the action core registers throughget_ajax_response()and checks the response and the resulting state.
The community events tests mock the Events API, so they make no network requests. The save-widget tests use a per-test Text widget and restore the widget globals afterward.
This consolidates five earlier handler test proposals.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15421
Props mindctrl, pbearne.
See #65252.
- 21:23 Changeset [64415] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Retry failed and stalled downloads in CI setup.
From October 15 to 28, 13 of 523 trunk Performance Tests runs needed a rerun because a setup step failed, and three Playwright installs hung for six hours.
Add two composite actions.
download-with-retrydownloads with curl, retrying on any error and on stalled transfers.run-with-retryruns a command up to three times. Use them for the Gutenberg download in E2E tests and the WordPress Importer and mock data downloads in performance tests. Also use them for the WordPress downloads in the installation, upgrade, and performance baseline steps. Retry the global npm install in thesetup-npmaction.
Also cap the Playwright browser install and the mock data import at 15 minutes each, and skip archiving performance artifacts when the tests never ran.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15210
Props lucatume, johnbillion.
See #65845.
- 21:22 Changeset [64414] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Introduce phpstan-strict-rules.
This adds
phpstan/phpstan-strict-rulesas a development dependency so that its rules can be enabled in a localphpstan.neonto work toward compliance, and it enables by default the rules which core already complies with or which enforce the WordPress Coding Standards:
- Disallow the backtick operator.
- Disallow short ternaries (the one remaining instance is replaced).
- Disallow
$thisin closures. - Require inherited method names to match in case.
The rules are registered individually rather than by including the package's
rules.neon, because that file also makes several PHPStan parameters stricter even when its rules are disabled, and because a local config including it would otherwise fail on the duplicate include. The README documents how to opt into the other rules locally, and the roles ofbase.neonandphpstan.neon.distare clarified so that local configs include the latter rather than copying it.
Developed in https://github.com/WordPress/wordpress-develop/pull/15399.
Follow-up to r61699, r63420.
Props westonruter, apermo.
See #65817.
- 20:55 Changeset [64413] by
-
- trunk/wp-includes/version.php
External Libraries: Remove build dependent jQuery file tests.
Removes PHPUnit tests introduced in r63983 to ensure the jQuery and jQuery Migrate files are present.
These tests are causing false failures if the test suite is run without running the build step.
Follow-up to r63983.
Developed in https://github.com/WordPress/wordpress-develop/pull/15435.
Props sergeybiryukov.
Fixes #66203.
- 20:50 Changeset [64412] by
-
- trunk/wp-includes/comment-template.php
- trunk/wp-includes/version.php
Comments: Add conditional return types to comment date functions.
Both
get_comment_date()andget_comment_time()return the result ofmysql2date(), which is an integer for the 'U' and 'G' formats and false on failure, yet they were documented as returning only a string. Callers such as the Comment Date block therefore had to castget_comment_date( 'U', $comment )before passing it tohuman_time_diff(). They now declare the same conditional return on$formatasmysql2date()and the post date functions, and theget_comment_dateandget_comment_timefilters document false as well, since the return type ofapply_filters()is derived from them.
A nonexistent comment no longer causes
get_comment_date()to read a property on null. For back-compat, false is still passed through theget_comment_datefilter, as is done inget_the_modified_date()andget_the_modified_time(), so the filter's$commentparameter is now documented as possibly null. Since r55284,get_comment_time()has returned an empty string for a nonexistent comment without applying its filter, and this is left unchanged.
Developed in https://github.com/WordPress/wordpress-develop/pull/15473.
Follow-up to r37866, r55284, r63941.
See #65817.
- 20:00 Changeset [64411] by
-
- trunk/wp-includes/class-wp-date-query.php
- trunk/wp-includes/version.php
Date/Time: Correct argument types in
WP_Date_Query.
The PHPStan baseline held eight
argument.typeerrors forWP_Date_Query, caused by docblocks narrower than the input the methods actually handle and by an unused parameter. Sincebuild_value()was introduced it has been documented as taking a string or an array, yetbuild_time_query()has always passed it integers or null. And when nested queries were added,get_sql_for_subquery()passed an empty string for the$parent_queryarray thatget_sql_for_clause()never reads.
No path of
build_mysql_datetime()returns false, though its@returntag said otherwise. An unparseable string has always resulted in the Unix epoch, obtained by passing false as the timestamp togmdate(). That fallback now passes 0 and is documented, and its test asserts the fixed value instead of computing it, which also corrects a comment claiming the test was time-dependent.
The PHPStan types also go further than the published
@paramtags in describing valid input. The comparison operator is limited to the ten accepted byget_compare(), which are put directly into SQL. Date values are limited to non-negative integers or numeric strings, becauseabsint()would silently turn a negative value positive. Non-numeric values are still filtered out at runtime, so there is no change in behavior.
Developed in https://github.com/WordPress/wordpress-develop/pull/15469.
Follow-up to r25139, r29923, r45876.
Props pwtyler, westonruter.
See #65817.
- 19:18 Changeset [64410] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Switch the E2E theme before the other resets.
E2E global setup activated Twenty Twenty-One at the same time as it deleted posts and blocks and reset preferences.
switch_theme()savestemplateandstylesheetone after the other, so a request that loads between the two writes sees Ipsum as a child of Twenty Twenty-One. Ipsum then requiresinc/abilities.phpfrom the parent theme, which does not exist, and the request fails with a PHP fatal error that global setup cannot parse as JSON.
Activate the theme first, then run the other resets in parallel.
Follow-up to [65224].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15471
Props adrianmoldovanwp.
See #66455.
- 19:08 Changeset [64409] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use web-first assertions in more E2E tests.
Replace waits followed by one-time reads with Playwright assertions that retry until they pass. Each test keeps the same checks.
The edit-posts spec now waits for the post title instead of any element in the editor iframe. The media-upload spec drops a
waitForLoadState( 'load' )call, sincevisitAdminPage()already waits for the page to load.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15463
Props adrianmoldovanwp.
See #66455.
- 19:03 Changeset [64408] by
-
- trunk/wp-admin/includes/class-wp-automatic-updater.php
- trunk/wp-admin/includes/class-wp-site-health-auto-updates.php
- trunk/wp-includes/version.php
Upgrade/Install: Detect a
.gitfile when checking for a VCS checkout.
WP_Automatic_Updater::is_vcs_checkout()looks for.gitwithis_dir(), but in a Git worktree or submodule.gitis a plain file that points to the real repository. When there's no.gitdirectory higher up, the site is treated as not under version control and automatic updates run. The Site Health VCS test has its own copy of the same check.
What changes
is_vcs_checkout()andWP_Site_Health_Auto_Updates::test_vcs_abspath()usefile_exists()instead ofis_dir(), so a.gitfile counts as a checkout.- The
.gitfile isn't read to see where it points. In case of a Docker site running from a worktree, the path may be on the host and may not exist inside the container. - The
automatic_updates_is_vcs_checkoutfilter still decides the result.
Props dlocc.
Fixes #66460.
Built from https://develop.svn.wordpress.org/trunk@65259
- 18:03 Changeset [64407] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Share the client-side media upload E2E helpers.
The three client-side media upload specs each kept their own copies of the same constants and helpers. Move them into
tests/e2e/utils/media-pipeline.js, and import them in each spec.
countUploadRequests()had two versions. The shared one returns all five counters, so every existing assertion still applies.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15429
Props adrianmoldovanwp.
See #66455.
- 16:39 Changeset [64406] by
-
- trunk/wp-includes/version.php
Tests: Cover the
get_wp_title_rssfilter inget_wp_title_rss().
Add a test that a callback on the
get_wp_title_rssfilter receives the document title and can change the feed title thatget_wp_title_rss()returns.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15370
Props shailu25.
Fixes #66474.
- 16:38 Changeset [64405] by
-
- trunk/wp-includes/version.php
Tests: Cover the
the_permalink_rssfilter and escaping inthe_permalink_rss().
Add a test that the
the_permalink_rssfilter receives the post permalink, and that the filtered URL is escaped in the feed output.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15371
Props shailu25.
Fixes #66473.
- 16:00 Changeset [64404] by
-
- trunk/wp-includes/version.php
Tests: Cover the
post_mime_typesfilter inget_post_mime_types().
Add a test that a callback on the
post_mime_typesfilter can change the labelsget_post_mime_types()returns.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15376
Props shailu25.
Fixes #66472.
- 15:53 Changeset [64403] by
-
- trunk/wp-includes/version.php
Tests: Cover
get_taxonomies_for_attachments().
Add tests that
get_taxonomies_for_attachments()returns taxonomies registered for attachments and for attachment subtypes such asattachment:image, as names or as objects, and leaves out taxonomies for other post types.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15377
Props shailu25.
Fixes #66471.
- 15:52 Changeset [64402] by
-
- trunk/wp-includes/version.php
Tests: Cover
find_core_update().
Add tests that
find_core_update()returns false without update data, returns the update that matches both version and locale, and returns false when either the locale or the version does not match.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15378
Props shailu25.
Fixes #66470.
- 15:46 Changeset [64401] by
-
- trunk/wp-includes/version.php
Tests: Remove a test file committed by mistake in [65251].
The
format_for_editor()test was not part of that change. It will land with its own ticket.
- 15:42 Changeset [64400] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Keep default-excluded groups excluded when using
--exclude-group.
Passing
--exclude-groupreplaces the group exclusions in the PHPUnit XML config, and the test bootstrap also cleared its own list of skipped groups. So any--exclude-grouprun also ran the groups excluded by default, such asajax,ms-filesandexternal-http.
A new test listener now removes default-excluded tests from every suite, including nested ones, before class fixtures run. A group requested with
--groupstill runs.
Developed in: https://github.com/WordPress/wordpress-develop/pull/11801
Props arkaprabhachowdhury, netweb, isabel_brison, johnbillion.
Fixes #34185.
11/03/2026:
- 20:35 Changeset [64399] by
-
- trunk/wp-includes/ms-blogs.php
- trunk/wp-includes/query.php
- trunk/wp-includes/version.php
Rewrites: Avoid fatal errors when flushing rules for random content.
wp_random_content_flush_rewrite_rules_for_post()runs on thewp_after_insert_postandafter_delete_postactions, which third-party code may fire with a missing or incorrectly typed$post. Also make the$postparameter of_update_posts_count_on_delete()optional for the same single-argumentafter_delete_postcalls.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14356
Follow-up to r64402.
Props jorbin, bradshawtm, therssoftware.
Fixes #64498.
- 19:57 Changeset [64398] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use PR number for
concurrencygroups instead ofhead_ref.
The current standard across all GitHub Actions workflows is to configure
concurrencyto use thegithub.head_refvalue in thegroupname for a given PR. Becausehead_refonly includes the branch name, workflow runs can be inadvertantly cancelled when two PRs are open from different forks with identical branch names.
This switches to using the
github.event.pull_request.numberinstead ofgithub.head_refto ensure that runs are properly grouped only with runs from the same pull request. A similar change has been made toprops-bot.yml, which can be triggered by anissue_commentevent. In this case, thegithub.event.issue.numberwill be used. In the context of GitHub,issues == pull_requestsfor the data returned by a number of request types.
Props lancewillett.
See #65845.
- 19:04 Changeset [64397] by
-
- trunk/wp-includes/version.php
Tests: Stop passing objects to static methods through Reflection.
PHP 8.6 has deprecated passing an object to
ReflectionMethod::invoke()andReflectionMethodL::invokeArgs()when the target method is static.
This addresses this within two PHPUnit-related files.
Props westonruter.
Fixes #66457.
- 18:04 Changeset [64396] by
-
- trunk/wp-includes/embed.php
- trunk/wp-includes/version.php
Docs: Move the
oembed_min_max_widthshape to its docblock.
In r62719 an inline
@varwas added after theapply_filters()call inget_oembed_response_data(), narrowing the filtered widths forclamp(). A type declared below the assignment it describes is confusing to read, but it could not go above, since the filter's docblock must immediately precedeapply_filters()or the hook is reported as undocumented. The shape is now declared once, as a@phpstan-paramin the filter docblock next to the@paramhash it refines.
The
minandmaxkeys are also markedRequired.in the hash. Since r65217 that marker makes a key required, where the keys of a@paramhash are otherwise read as optional because a caller may pass a subset of them. That does not fit a filtered value: core always passes both keys, and a callback must return both, since they are read unconditionally. The documented defaults therefore describe the values core supplies, not a fallback for an omitted key. The@phpstan-paramis kept regardless, because the hash only saysint, while the shape narrows the widths topositive-int.
Developed in https://github.com/WordPress/wordpress-develop/pull/15264.
Follow-up to r62719, r65217.
Props westonruter, dmsnell.
See #65817.
- 17:52 Changeset [64395] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Fix static analysis issues in
HashNotationVisitor.
This fixes the level-10 PHPStan errors that predate the hash notation visitor's recent changes, along with a few PhpStorm inspection warnings, without changing the
@phpstan-*tags the visitor derives acrosssrc/.
Most of the errors came from one limit: an entry in a hash can open a hash of its own, and an array shape cannot refer to itself, so every nested entry was
mixed. Entries are therefore read into a newHashEntryclass, whose children are typed as entries in turn. The rest came from writes through a list offset, which PHPStan reads as adding an incomplete element, so a tag or entry is now completed before it is added to its list. String types are also narrowed where possible, though an entry's type and key are only non-empty strings, since0is valid as either.
Developed in https://github.com/WordPress/wordpress-develop/pull/15384.
Follow-up to r63420, r63789, r65217.
Props westonruter, lancewillett.
See #65817.
- 17:41 Changeset [64394] by
-
- trunk/wp-includes/version.php
Tests: Compare HTML semantically in the
serialize_token()attribute test.
Use
assertEqualHTML()instead ofassertSame()when checking thatWP_HTML_Processor::serialize_token()reflects enqueued attribute updates, so the test no longer depends on the order of serialized attributes.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15373
Props motylanogha, dmsnell.
See #64567.
- 17:22 Changeset [64393] by
-
- trunk/wp-includes/version.php
Tests: Remove block styles theme support in the tests that require its absence.
Two
Tests_Dependencies_Stylestests assumed the active theme does not supportwp-block-styles. Remove that support in each test instead of relying on earlier tests leaving it unset.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14688
Props devmuhib, huzaifaalmesbah.
See #65893.
- 17:21 Changeset [64392] by
-
- trunk/wp-includes/version.php
Tests: Check permalinks for post titles with a percent sign and digits.
Verify that a title containing
%10keeps the octet in its slug, and that the resulting permalink resolves to the post.
Developed in: https://github.com/WordPress/wordpress-develop/pull/8250
Props abcd95, mte90.
Fixes #3329.
- 17:19 Changeset [64391] by
-
- trunk/wp-includes/version.php
Tests: Check that saving General Settings keeps the theme options.
Add an E2E regression test for the Gutenberg 10.7 bug that cleared
stylesheetandtemplatewhen General Settings were saved. The test saves a new tagline through the settings form, checks both theme options are unchanged, and restores the tagline.
Developed in: https://github.com/WordPress/wordpress-develop/pull/8301
Props abcd95, fullofcaffeine.
Fixes #53520.
- 17:18 Changeset [64390] by
-
- trunk/wp-includes/version.php
Tests: Check admin bar visibility on the front end.
Add E2E tests that the admin bar shows on the front page for a logged-in user and is absent for a logged-out visitor. The logged-out test starts without cookies, so it leaves the shared admin session intact.
Developed in: https://github.com/WordPress/wordpress-develop/pull/9023
Props sukhendu2002, hideokamoto, justinahinon, talldanwp, isabel_brison, sirlouen, wildworks.
Fixes #48978.
- 17:17 Changeset [64389] by
-
- trunk/wp-admin/network/settings.php
- trunk/wp-includes/functions.php
- trunk/wp-includes/version.php
Networks and Sites: Clarify the network admin email change notices.
Bring the network admin email change flow in line with the single site notices. Show a pending change as an info notice at the top of Network Settings and next to the email field, both with a "Cancel request" link. After the confirmation link is followed, show "Network admin email updated." instead of "Settings saved."
Show "Settings saved." only when
updated=true, and in bold, so a failed confirmation or a canceled request no longer reports a save. Addnetwork_admin_email_updatedtowp_removable_query_args().
Developed in: https://github.com/WordPress/wordpress-develop/pull/14247, https://github.com/WordPress/wordpress-develop/pull/14466
Props therssoftware, afercia, johnjamesjacoby, realloc.
Fixes #66300.
- 17:14 Changeset [64388] by
-
- trunk/wp-includes/version.php
Tests: Generate only the thumbnail in the Imagick PDF preview test.
The PDF alpha channel test needs one fallback size to create the full preview. Limit the fallback sizes to the thumbnail so the upload no longer also renders medium and large images.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14248
Props abcd95, huzaifaalmesbah.
See #66074.
- 17:13 Changeset [64387] by
-
- trunk/wp-includes/version.php
Tests: Cover
get_previous_post()andget_next_post().
Assert that both wrappers return the adjacent posts already used by
test_get_adjacent_post(), without new fixtures.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15362
Props devmuhib, huzaifaalmesbah.
See #65819.
- 17:11 Changeset [64386] by
-
- trunk/wp-includes/version.php
Tests: Cover
wp_admin_css_color()registration.
Verify that
wp_admin_css_color()stores the name, URL, colors and icon colors of a registered admin color scheme.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15363
Props devmuhib, huzaifaalmesbah.
See #65819.
- 17:10 Changeset [64385] by
-
- trunk/wp-includes/version.php
Tests: Cover
wp_admin_css_uri().
Verify that
wp_admin_css_uri()returns the admin stylesheet URL with a version argument, and that thewp_admin_css_urifilter receives the file name and can replace the URL.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15364
Props devmuhib, huzaifaalmesbah.
See #65819.
- 17:09 Changeset [64384] by
-
- trunk/wp-includes/version.php
Tests: Cover
rawurlencode_deep()andurldecode_deep()on strings.
Verify that
rawurlencode_deep()encodes spaces, ampersands and equals signs, and thaturldecode_deep()decodes both+and%20. Keep the existingurlencode_deep()tests.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15312
Props devmuhib, huzaifaalmesbah.
See #65819.
- 16:43 Changeset [64383] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Skip the WordPress install in process-isolated tests.
A
@runInSeparateProcesstest loads the bootstrap again in a child process, which reraninstall.phpand recreated every table the parent had already installed. Skip the install while PHPUnit sets$GLOBALS['__PHPUNIT_BOOTSTRAP'], which it does only in a child process.WP_TESTS_SKIP_INSTALL=1works as before.
The reinstall also hid state that test classes leak.
WP_UnitTestCase_Basenow deletes all data before each class's fixtures and restores the options table andsite_adminsafter each class. It also flushes the cache before the class cleanup and flushes a persistent object cache after each rollback.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14786
Props lucatume, adrianmoldovanwp.
Fixes #66410.
- 16:05 Changeset [64382] by
-
- trunk/wp-includes/version.php
Tests: Cover
bloginfo()output.
Verify that
bloginfo()prints the site name by default, prints the home URL forurl, and prints the value returned by thebloginfofilter.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15320
Props devmuhib, huzaifaalmesbah.
See #65819.
- 16:03 Changeset [64381] by
-
- trunk/wp-includes/version.php
Tests: Remove unneeded final cleanup from taxonomy tests.
Three
Tests_Taxonomytests removed their taxonomy from the global registry after their last assertion. The per-test reset already unregisters custom taxonomies, so these lines protected nothing. Another test unregisteredwptests_pt, a post type it never registers.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14952
Props rejaulalomkhan, huzaifaalmesbah, mukesh27.
See #65893.
- 15:44 Changeset [64380] by
-
- trunk/wp-includes/version.php
Post WordPress 7.2 Beta 4 version bump.
- 15:18 Changeset [64379] by
-
- trunk/wp-includes/version.php
WordPress 7.2 Beta 4.
- 14:51 Changeset [64378] by
-
- trunk/wp-includes/post.php
- trunk/wp-includes/version.php
Media: Ignore empty items in a comma-separated
post_mime_typestring.
wp_post_mime_type_where()splits a comma-separated string of MIME types withexplode(). An extra comma left an empty item, and the empty string is one of the wildcards, so a value likeimage/jpeg,returned no clause and matched every MIME type. This affectedWP_Queryandget_posts()withpost_mime_type,wp_count_attachments()and the media modal'squery-attachmentsAjax request.
What changes
wp_post_mime_type_where(): after a string is split, empty items are removed witharray_diff(). A value of'0'is not removed.- Arrays are not changed. An empty string, a string of only commas and spaces, and an explicit
%still match every MIME type.
Developed in https://github.com/WordPress/wordpress-develop/pull/15403.
Follow-up to r6910.
Props ekamran.
Fixes #66454.
Built from https://develop.svn.wordpress.org/trunk@65229
- 14:37 Changeset [64377] by
-
- trunk/wp-includes/interactivity-api/class-wp-interactivity-api.php
- trunk/wp-includes/version.php
Interactivity API: Remove event handler bind directives.
Server processing now removes
data-wp-bind--on*directives from output.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15396
Follow-up to r61885.
Props jonsurrell, ntsekouras, luisherranz.
See #66452.
- 13:45 Changeset [64376] by
-
- trunk/wp-admin/includes/class-wp-automatic-updater.php
- trunk/wp-includes/version.php
Coding Standards: Fix a blank line WPCS issue found after [65226].
See #42281.
- 13:40 Changeset [64375] by
-
- trunk/wp-admin/includes/class-language-pack-upgrader.php
- trunk/wp-admin/includes/class-wp-automatic-updater.php
- trunk/wp-admin/includes/update.php
- trunk/wp-admin/update-core.php
- trunk/wp-includes/update.php
- trunk/wp-includes/version.php
Upgrade/Install: Show and allow to select translation updates on the Updates screen.
This changeset introduces a way to see each available translation update on the Updates screen, and allows users to update them selectively. With this change, translation updates management is more consistent with how plugin and theme updates are managed.
Developed in https://github.com/WordPress/wordpress-develop/pull/11610.
Props stk_jj, Presskopp, jyria, tfrommen, audrasjb, ozgursar, im3dabasia1.
Fixes #42281.
- 12:09 Changeset [64374] by
-
- trunk/wp-includes/assets/script-loader-packages.php
- trunk/wp-includes/assets/script-modules-packages.php
- trunk/wp-includes/blocks/playlist-track.php
- trunk/wp-includes/blocks/playlist.php
- trunk/wp-includes/build/routes/connectors-home/content.js
- trunk/wp-includes/build/routes/connectors-home/content.min.asset.php
- trunk/wp-includes/build/routes/connectors-home/content.min.js
- trunk/wp-includes/build/routes/font-list/content.js
- trunk/wp-includes/build/routes/font-list/content.min.asset.php
- trunk/wp-includes/build/routes/font-list/content.min.js
- trunk/wp-includes/css/dist/block-editor/content-rtl.css
- trunk/wp-includes/css/dist/block-editor/content-rtl.min.css
- trunk/wp-includes/css/dist/block-editor/content.css
- trunk/wp-includes/css/dist/block-editor/content.min.css
- trunk/wp-includes/css/dist/block-editor/style-rtl.css
- trunk/wp-includes/css/dist/block-editor/style-rtl.min.css
- trunk/wp-includes/css/dist/block-editor/style.css
- trunk/wp-includes/css/dist/block-editor/style.min.css
- trunk/wp-includes/css/dist/components/style-rtl.css
- trunk/wp-includes/css/dist/components/style-rtl.min.css
- trunk/wp-includes/css/dist/components/style.css
- trunk/wp-includes/css/dist/components/style.min.css
- trunk/wp-includes/css/dist/edit-site/style-rtl.css
- trunk/wp-includes/css/dist/edit-site/style-rtl.min.css
- trunk/wp-includes/css/dist/edit-site/style.css
- trunk/wp-includes/css/dist/edit-site/style.min.css
- trunk/wp-includes/css/dist/editor/style-rtl.css
- trunk/wp-includes/css/dist/editor/style-rtl.min.css
- trunk/wp-includes/css/dist/editor/style.css
- trunk/wp-includes/css/dist/editor/style.min.css
- trunk/wp-includes/js/dist/block-directory.js
- trunk/wp-includes/js/dist/block-directory.min.js
- trunk/wp-includes/js/dist/block-editor.js
- trunk/wp-includes/js/dist/block-editor.min.js
- trunk/wp-includes/js/dist/block-library.js
- trunk/wp-includes/js/dist/block-library.min.js
- trunk/wp-includes/js/dist/blocks.js
- trunk/wp-includes/js/dist/blocks.min.js
- trunk/wp-includes/js/dist/components.js
- trunk/wp-includes/js/dist/components.min.js
- trunk/wp-includes/js/dist/customize-widgets.js
- trunk/wp-includes/js/dist/customize-widgets.min.js
- trunk/wp-includes/js/dist/dom.js
- trunk/wp-includes/js/dist/dom.min.js
- trunk/wp-includes/js/dist/edit-post.js
- trunk/wp-includes/js/dist/edit-post.min.js
- trunk/wp-includes/js/dist/edit-site.js
- trunk/wp-includes/js/dist/edit-site.min.js
- trunk/wp-includes/js/dist/edit-widgets.js
- trunk/wp-includes/js/dist/edit-widgets.min.js
- trunk/wp-includes/js/dist/editor.js
- trunk/wp-includes/js/dist/editor.min.js
- trunk/wp-includes/js/dist/format-library.js
- trunk/wp-includes/js/dist/format-library.min.js
- trunk/wp-includes/js/dist/media-utils.js
- trunk/wp-includes/js/dist/media-utils.min.js
- trunk/wp-includes/js/dist/notices.js
- trunk/wp-includes/js/dist/notices.min.js
- trunk/wp-includes/js/dist/patterns.js
- trunk/wp-includes/js/dist/patterns.min.js
- trunk/wp-includes/js/dist/rich-text.js
- trunk/wp-includes/js/dist/rich-text.min.js
- trunk/wp-includes/js/dist/script-modules/boot/index.js
- trunk/wp-includes/js/dist/script-modules/boot/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/boot/index.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.js
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/attachment.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/page.js
- trunk/wp-includes/js/dist/script-modules/core-fields/page.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/page.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.js
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/post_type_supports.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_block.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template.min.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.js
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.min.asset.php
- trunk/wp-includes/js/dist/script-modules/core-fields/wp_template_part.min.js
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.js
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/interactivity-router/index.min.js
- trunk/wp-includes/js/dist/script-modules/interactivity/index.js
- trunk/wp-includes/js/dist/script-modules/interactivity/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/interactivity/index.min.js
- trunk/wp-includes/js/dist/script-modules/workflow/index.js
- trunk/wp-includes/js/dist/script-modules/workflow/index.min.asset.php
- trunk/wp-includes/js/dist/script-modules/workflow/index.min.js
- trunk/wp-includes/js/dist/theme.js
- trunk/wp-includes/js/dist/theme.min.js
- trunk/wp-includes/js/dist/upload-media.js
- trunk/wp-includes/js/dist/upload-media.min.js
- trunk/wp-includes/js/dist/widgets.js
- trunk/wp-includes/js/dist/widgets.min.js
- trunk/wp-includes/version.php
General: Bump the pinned hash for Gutenberg to
c035c1a.
This updates the pinned commit hash of the Gutenberg repository from
cc75a79186fd23e72eb015d594e82f40c6209eb5toc035c1a649ef68f5c1646694cf440df1d7ae6e62(fixes cherry-picked to thewp/7.2branch).
A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/cc75a79186fd23e72eb015d594e82f40c6209eb5...c035c1a649ef68f5c1646694cf440df1d7ae6e62
- Components: Use solid brand highlights for popup items (https://github.com/WordPress/gutenberg/pull/84583) (#85848)
- Fix endless sideload loop when the browser can't decode a big image (https://github.com/WordPress/gutenberg/pull/83530)
- Notes: Show reaction picker as a row of emoji (https://github.com/WordPress/gutenberg/pull/85819) (#85892)
- Notes: Add thumbs up and plus reactions (https://github.com/WordPress/gutenberg/pull/85565)
- Notes: Share thread focus recovery across actions (https://github.com/WordPress/gutenberg/pull/85455)
- Core Fields: Prevent extra space between
/and text in slug input (https://github.com/WordPress/gutenberg/pull/85935) - Notes: Add search and a status filter to the All Notes sidebar (https://github.com/WordPress/gutenberg/pull/84060)
- Notes: Use the note permission check when deleting a reaction (https://github.com/WordPress/gutenberg/pull/85883)
- [WP 7.2] Math block: Keyboard focus is trapped in the LaTeX field when the formula has an error (https://github.com/WordPress/gutenberg/pull/86032)
- Core fields: Keep the status icon full size when its label wraps (https://github.com/WordPress/gutenberg/pull/85828) (#86050)
- [WP 7.2] ToolsPanel: Keep the "Reset" label visible on the highlighted menu item (https://github.com/WordPress/gutenberg/pull/86060)
- Interactivity Router: Ignore router regions and attachTo targets inside data-wp-html content (https://github.com/WordPress/gutenberg/pull/84919) (#86059)
- [WP 7.2] wp-build: Derive CSS module class names from each stylesheet's CSS (https://github.com/WordPress/gutenberg/pull/86062)
- Playlist: Allow track without an attachment ID to render on the frontend (https://github.com/WordPress/gutenberg/pull/83880) (#86158)
- UI: Show only the day number in Calendar day cells (https://github.com/WordPress/gutenberg/pull/86010) (#86183)
- Notes: Tolerate a null comment in the reaction cascade hooks (https://github.com/WordPress/gutenberg/pull/85959)
- Rich Text: Remove stale format boundary when field loses selection (https://github.com/WordPress/gutenberg/pull/86168)
- Notes: Only let a reaction's author delete it (https://github.com/WordPress/gutenberg/pull/85415)
- Writing flow: Fix Arrow Up and Down getting stuck at the edge of the screen (https://github.com/WordPress/gutenberg/pull/85408)
- Try: Run e2e tests in parallel, on one wp-env site per two cores (https://github.com/WordPress/gutenberg/pull/85420)
- Raw handling: Keep shortcodes in text inline (https://github.com/WordPress/gutenberg/pull/85795)
- Fix: Fixes non-breaking space replacement tooltip (https://github.com/WordPress/gutenberg/pull/85777)
- Non-breaking space: Remove non-breaking spaces that would collapse when replaced (https://github.com/WordPress/gutenberg/pull/85873)
Props mamaduka.
See #66340.
Built from https://develop.svn.wordpress.org/trunk@65225
- 12:04 Changeset [64373] by
-
- trunk/wp-content/themes/ipsum/functions.php
- trunk/wp-content/themes/ipsum/inc
- trunk/wp-content/themes/ipsum/inc/abilities.php
- trunk/wp-content/themes/ipsum/patterns/about-row.php
- trunk/wp-content/themes/ipsum/patterns/archive-columns.php
- trunk/wp-content/themes/ipsum/patterns/archive-compact.php
- trunk/wp-content/themes/ipsum/patterns/archive-full.php
- trunk/wp-content/themes/ipsum/patterns/archive-lead.php
- trunk/wp-content/themes/ipsum/patterns/archive-minimal.php
- trunk/wp-content/themes/ipsum/patterns/archive-simple.php
- trunk/wp-content/themes/ipsum/patterns/archive-standard.php
- trunk/wp-content/themes/ipsum/patterns/cta-membership.php
- trunk/wp-content/themes/ipsum/patterns/footer-centered.php
- trunk/wp-content/themes/ipsum/patterns/footer-subscribe.php
- trunk/wp-content/themes/ipsum/patterns/footer-wide.php
- trunk/wp-content/themes/ipsum/patterns/format-audio.php
- trunk/wp-content/themes/ipsum/patterns/format-link.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid-full.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid-wide.php
- trunk/wp-content/themes/ipsum/patterns/gallery-grid.php
- trunk/wp-content/themes/ipsum/patterns/header-collapsed.php
- trunk/wp-content/themes/ipsum/patterns/header-default.php
- trunk/wp-content/themes/ipsum/patterns/header-sticky.php
- trunk/wp-content/themes/ipsum/patterns/header-vertical.php
- trunk/wp-content/themes/ipsum/patterns/hero-colophon.php
- trunk/wp-content/themes/ipsum/patterns/hero-epigraph.php
- trunk/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-comments.php
- trunk/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-index.php
- trunk/wp-content/themes/ipsum/patterns/hidden-keep-reading.php
- trunk/wp-content/themes/ipsum/patterns/hidden-search-bar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-search.php
- trunk/wp-content/themes/ipsum/patterns/hidden-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php
- trunk/wp-content/themes/ipsum/patterns/hidden-single.php
- trunk/wp-content/themes/ipsum/patterns/kind-words.php
- trunk/wp-content/themes/ipsum/patterns/navigation-overlay.php
- trunk/wp-content/themes/ipsum/patterns/overlay-contents.php
- trunk/wp-content/themes/ipsum/patterns/overlay-profile.php
- trunk/wp-content/themes/ipsum/patterns/page-bio.php
- trunk/wp-content/themes/ipsum/patterns/page-blog-home.php
- trunk/wp-content/themes/ipsum/patterns/page-soon.php
- trunk/wp-content/themes/ipsum/patterns/text-alternating.php
- trunk/wp-content/themes/ipsum/patterns/text-statement.php
- trunk/wp-content/themes/ipsum/style.css
- trunk/wp-content/themes/ipsum/styles/blocks/quote-mark.json
- trunk/wp-content/themes/ipsum/styles/colors/01-blue-hour.json
- trunk/wp-content/themes/ipsum/styles/colors/02-sunrise.json
- trunk/wp-content/themes/ipsum/styles/colors/03-morning.json
- trunk/wp-content/themes/ipsum/styles/colors/04-high-noon.json
- trunk/wp-content/themes/ipsum/styles/colors/05-golden-hour.json
- trunk/wp-content/themes/ipsum/styles/colors/06-evening.json
- trunk/wp-content/themes/ipsum/styles/colors/07-after-hours.json
- trunk/wp-content/themes/ipsum/theme.json
- trunk/wp-includes/version.php
Bundled Themes: Sync Ipsum with its GitHub repository.
Brings over the changes merged in Ipsum's GitHub repository:
- Add a design guide ability, so AI agents can read the theme's palette, typography, spacing, style variations, patterns and templates through the Abilities API.
- Name the palette colors by role and use the Twenty Twenty-Five slugs.
- Color the header submenus with the palette, and open them leftwards so they stay on screen.
- Hide the comments call to action and its separators when comments are closed.
- Keep the Header Sticky navigation overlay above the admin bar and Search Bar.
- Hide the author card for post types without author support.
- Restore a visible focus state to the Search block with the button inside.
- Hide decorative characters from screen readers.
- Fix ambiguous link texts by removing redundant post date links and adding screen reader text to the comments call to action.
- Space the sidebar category links to meet the 24px target size.
- Align table header labels with their columns in RTL.
- Standardize titles in hidden patterns and add a description to the wide footer pattern.
Developed in https://github.com/WordPress/wordpress-develop/pull/15113.
Follow-up to [64677].
Props onemaggie, sakshamsharma5, noruzzaman, khushalsains, matthewneilcowan, rahultank, juanfra, mikachan, ravipatel, iamarinoh, poena, peterwilsoncc, nilambar, prasadkarmalkar, karunyachavan84, nendeb55, westonruter, gziolo.
See #66352.
Built from https://develop.svn.wordpress.org/trunk@65224
- 11:40 Changeset [64372] by
-
- trunk/wp-includes/admin-bar.php
- trunk/wp-includes/class-wp-admin-bar.php
- trunk/wp-includes/css/admin-bar-rtl.css
- trunk/wp-includes/css/admin-bar-rtl.min.css
- trunk/wp-includes/css/admin-bar.css
- trunk/wp-includes/css/admin-bar.min.css
- trunk/wp-includes/version.php
Toolbar: Hide legacy Dashicons when a node has an SVG icon
When an admin bar node has an SVG icon, the Dashicon it draws for earlier WordPress versions is now hidden, whether that Dashicon is an empty icon element in the title or is drawn with CSS on the link. Plugins can therefore pass the
iconargument with the same title on 7.2 and earlier versions, without a version check, and an unregistered icon now renders nothing instead of leaving an empty gap.
Core nodes now set their icons with the
iconargument instead of an empty icon element in the title, and the title is no longer modified when the node is rendered.
Developed in https://github.com/WordPress/wordpress-develop/pull/14999
Follow-up to [64583].
Props fushar, mamaduka, mciampini, mcsf, peterwilsoncc, sadmansakibnadvi, wildworks.
See #65089.
Built from https://develop.svn.wordpress.org/trunk@65223
- 07:36 Changeset [64371] by
-
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
- trunk/wp-includes/version.php
REST API: Only let a reaction's author delete it.
Since r65038, deleting a note reaction goes through the same
edit_commentcheck as its note, so anyone who can edit the note's post, including the post author and administrators, could remove someone else's reaction. A reaction speaks for its author, soWP_REST_Comments_Controller::delete_item_permissions_check()now only allows its author to delete it.
Reactions on a resolved thread also can no longer be deleted, matching the existing check in
create_item(). The thread-root walk moves into a privateis_thread_resolved()helper shared by both.
The reaction type is matched case-insensitively, like in
check_edit_permission().
Developed in: https://github.com/WordPress/wordpress-develop/pull/15383
Developed in: https://github.com/WordPress/gutenberg/pull/85415
Props adamsilverstein, ramonopoly, mamaduka.
Fixes #66447.
Built from https://develop.svn.wordpress.org/trunk@65222
- 07:31 Changeset [64370] by
-
- trunk/wp-includes/html-api/class-wp-html-tag-processor.php
- trunk/wp-includes/version.php
HTML API: Remove redundant after_tag() call.
parse_next_tag()calledafter_tag(), but its only caller,base_class_next_token(), already callsafter_tag()before it.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15136
Props jonsurrell, dmsnell, lancewillett.
See #65984.
- 05:59 Changeset [64369] by
-
- trunk/wp-includes/html-api/class-wp-html-processor.php
- trunk/wp-includes/html-api/class-wp-html-tag-processor.php
- trunk/wp-includes/html-api/class-wp-html-token.php
- trunk/wp-includes/version.php
HTML API: Type tag queries and tag names for PHPStan.
The
$queryparameter ofnext_tag()is documented asarray|string|null, but its hash notation only describes the array form, so stubs generated from it (as used by Gutenberg) turned it into an array shape and dropped the bare tag-name form, reporting calls likenext_tag( 'FIGURE' )as errors. AQuerytype alias now covers the array, bare tag-name, andnullforms, with each key allowed to benullas documented. The HTML Processor defines its own alias adding thebreadcrumbskey, since type aliases are not inherited by subclasses.
Tag names are returned as
non-falsy-string, since a parsed name is never empty or'0', but accepted asnon-empty-string, since that is all a'' !== $tagcheck proves and a'0'query simply matches nothing.
The changes are to PHPDoc only, so there is no runtime change.
Developed in https://github.com/WordPress/wordpress-develop/pull/15305.
Follow-up to r55203.
Props westonruter, dmsnell.
See #65817.
- 05:34 Changeset [64368] by
-
- trunk/wp-admin/css/admin-menu-rtl.css
- trunk/wp-admin/css/admin-menu-rtl.min.css
- trunk/wp-admin/css/admin-menu.css
- trunk/wp-admin/css/admin-menu.min.css
- trunk/wp-admin/includes/misc.php
- trunk/wp-includes/css/admin-bar-rtl.css
- trunk/wp-includes/css/admin-bar-rtl.min.css
- trunk/wp-includes/css/admin-bar.css
- trunk/wp-includes/css/admin-bar.min.css
- trunk/wp-includes/general-template.php
- trunk/wp-includes/version.php
Administration: Brighten the icon color of the Fresh admin color scheme
In 7.2, the admin menu and toolbar icons are being switched from Dashicons to SVG icons.
This commits updates the colors to brighten / increase the opacity of icons (both dashicons and SVG icons) in the Fresh scheme
Developed in: https://github.com/WordPress/wordpress-develop/pull/15143
Follow-up to [65089].
Props fushar, wildworks, ramonopoly, fcoveram, sadmansakibnadvi, rollybueno.
Fixes #66411.
- 03:45 Changeset [64367] by
-
- trunk/wp-includes/class-wp-theme-json-resolver.php
- trunk/wp-includes/version.php
Code Quality: Document theme JSON resolver caches as nullable.
The cached static properties of
WP_Theme_JSON_Resolverall default tonulland are reset tonullinclean_cached_data(), and the getters check them againstnullto decide whether to rebuild the cache, but their@vartags omittednull. Adding it removes the six resultingassign.propertyTypeentries from the PHPStan baseline. There is no runtime change.
This mirrors the same fix to
WP_Theme_JSON_Resolver_Gutenbergin the Gutenberg plugin, developed in https://github.com/WordPress/gutenberg/pull/86111.
Developed in https://github.com/WordPress/wordpress-develop/pull/15385.
Follow-up to r50959, r52049, r54493, r63022.
Props noruzzaman, huzaifaalmesbah.
See #65817.
- 02:41 Changeset [64366] by
-
- trunk/wp-admin/includes/template.php
- trunk/wp-includes/blocks.php
- trunk/wp-includes/general-template.php
- trunk/wp-includes/ms-site.php
- trunk/wp-includes/version.php
- trunk/wp-includes/widgets/class-wp-widget-categories.php
Build/Test Tools: Type
T[]hash elements andRequired.keys.
The
HashNotationVisitorderived shapes only for a barearray,object, or class. A list of arrays declared asarray[]and documented by a single...$0entry, as the blocksparse_blocks()returns are, therefore stayedarray<array>, and every key read from an element wasmixed.
Such a
T[]now takes the shape when its entry has a hash of its own and is typed as thatT. The two types are compared as parsed, so class names and keywords match in any case, while shape keys and string literals must match exactly. A hash on a template type or type alias is left untranslated, since whether it needs an array or an object shape depends on what the name stands for.
Keys of a
@paramhash are optional, which is wrong for a value whose keys are always set, such as a parsed block, and there was no way to say otherwise. ARequired.sentence opening or closing a key's description, as core already writes it in many hashes, now makes the key required. UnlikeOptional., it must be capitalized, since prose mistaken for it would report an error at every call leaving the key out.
The sharper types exposed docblocks contradicting the code, which are corrected: the
typeof each settings error is always set, and neither theuser_idofwp_initialize_site()nor thehrefof a preloaded image is required. The blocksresolve_pattern_blocks()takes and returns are documented with the block hash, and the display arguments ofWP_Widget_Categories::widget()are marked required, removing errors deferred when they were documented as a hash in r64413.
At level 10, this fixes 64 errors and makes 15 existing issues visible, for 49 fewer errors overall.
Developed in https://github.com/WordPress/wordpress-develop/pull/14457.
Follow-up to r63420, r64413.
Props westonruter, lancewillett.
See #62762, #65817, #65890.
- 00:27 Changeset [64365] by
-
- trunk/wp-includes/version.php
Tests: Cover
dead_db()andadmin_color_scheme_picker().
Verify that
dead_db()shows the database error in the admin and during installation, and the generic message everywhere else.
Verify that
admin_color_scheme_picker()selects the given user's scheme rather than the current user's, falls back tomodernwhen the scheme is missing or unknown, listsmodern,freshandlightfirst, and renders each scheme's inputs, label and palette.
Developed in: https://github.com/WordPress/wordpress-develop/pull/5792, https://github.com/WordPress/wordpress-develop/pull/11740
- 00:22 Changeset [64364] by
-
- trunk/wp-includes/general-template.php
- trunk/wp-includes/version.php
Script Loader: Ignore image preloads that have no URL.
An image resource passed through the
wp_preload_resourcesfilter without anhrefwas accepted when it had eitherimagesrcsetorimagesizes, butimagesrcsetwas always used as the key for removing duplicates. A resource with onlyimagesizestherefore raised an undefined array key warning (plus a null array offset deprecation on PHP 8.5), collapsed every such resource onto the same empty key, and printed a<link>with no URL at all, sinceimagesizesis only output alongsideimagesrcset. A resource with neitherhrefnorasraised a warning as well.
Such a resource is now skipped unless
asisimageandimagesrcsetis set. PHPStan reports the missing offsets once the filter's value is typed from its documented hash notation.
Developed in https://github.com/WordPress/wordpress-develop/pull/15380.
Follow-up to r53846.
Props westonruter, adamsilverstein.
See #65817.
- 00:08 Changeset [64363] by
-
- trunk/wp-includes/version.php
Tests: Cover more admin helpers in
misc.php.
Verify that
got_url_rewrite()reports support for each server check it combines, and that thegot_url_rewritefilter overrides the result in both directions.
Verify that
iis7_save_url_rewrite_rules()writes a newweb.config, adds WordPress rules to an existing one while keeping other rules, removes them when permalinks are plain, and returns early outside IIS and on multisite.
Verify that
wp_reset_vars()prefers$_POSTover$_GET, treats empty and'0'values as missing, and overwrites existing globals.
Developed in: https://github.com/WordPress/wordpress-develop/pull/11657, https://github.com/WordPress/wordpress-develop/pull/11671, https://github.com/WordPress/wordpress-develop/pull/11737
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)