Timeline
11/09/2026: Today
- 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: Yesterday
- 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
11/02/2026:
- 23:20 Changeset [64362] by
-
- trunk/wp-content/themes/twentytwentythree/parts/header.html
- trunk/wp-content/themes/twentytwentythree/patterns/header.php
- trunk/wp-content/themes/twentytwentythree/patterns/hidden-navigation.php
- trunk/wp-includes/version.php
Twenty Twenty Three: Move navigation from a hidden to a header pattern.
Hidden patterns and categorized patterns behave differently for extenders, and the previous change prevented content from being inserted into the header. Follow up to [64303].
Developed in https://github.com/WordPress/wordpress-develop/pull/14629.
Props joedolson, mukesh27, peterwilsoncc, codebytom.
Fixes #66195.
Built from https://develop.svn.wordpress.org/trunk@65213
- 23:09 Changeset [64361] by
-
- trunk/wp-includes/block-supports/layout.php
- trunk/wp-includes/version.php
Editor: allow CSS custom properties in block gap values.
Ensures wp_sanitize_block_gap_value allows custom property strings so they can applied in responsive grid layout calculations.
Props noruzzaman.
Fixes #66427.
- 22:57 Changeset [64360] by
-
- trunk/wp-includes/class-wp-navigation-fallback.php
- trunk/wp-includes/version.php
Accessibility: Improve fallback
aria-labelfor navigation.
The fallback
wp_navigationpost has a default title of "Navigation", which provides the defaultaria-labelfor the menu. As allnavelements have the function of navigation, this is a strongly dis-recommended pattern for a default menu. This also leads to a duplicate name for the navigation screen and the default menu.
Change fallback name to 'Main', which is a high probability use case if a fallback menu is in use, and eliminates the naming conflict with the navigation screen.
Props bacoords, sainathpoojary, joedolson, afercia, rejaulalomkhan.
Fixes #66152.
Built from https://develop.svn.wordpress.org/trunk@65211
- 21:19 Changeset [64359] by
-
- trunk/wp-includes/version.php
Tests: Cover eleven admin AJAX handlers.
Dispatch registered AJAX actions and verify their responses, permission checks, and resulting database state. Consolidate the earlier handler test proposals and mock dashboard feeds to avoid network requests.
Add
WP_Ajax_UnitTestCase::get_ajax_response()to clear the response buffer before dispatch and fail when a handler does not terminate withwp_die().
Developed in: https://github.com/WordPress/wordpress-develop/pull/15381
Props mindctrl, pbearne.
See #65252.
- 21:14 Changeset [64358] by
-
- trunk/wp-admin/css/customize-controls-rtl.css
- trunk/wp-admin/css/customize-controls-rtl.min.css
- trunk/wp-admin/css/customize-controls.css
- trunk/wp-admin/css/customize-controls.min.css
- trunk/wp-includes/version.php
Customize: Correct section heading height to match the back button.
Sets
line-height: 2on the small label above Customizer section titles. This restores the heading height to 74px, matching the back button.
Developed in https://github.com/WordPress/wordpress-develop/pull/15379.
Follow-up to r63966.
Props sainathpoojary, sabernhardt.
Fixes #66444.
Built from https://develop.svn.wordpress.org/trunk@65209
- 19:55 Changeset [64357] 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-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
Accessibility: Improve focus state and contrast in admin bar.
Change the admin bar focus state to use a focus ring, similar to the majority of other focus states throughout the admin. Previous focus state was only a color change, and set a color contrast of 2.97:1 on the default theme, below WCAG requirements.
Also fix miscellaneous alignment errors in the admin bar that were made more obvious by shifting to a focus outline.
Props joedolson, khokansardar, afercia, jns141191, iamraju, Joen, muryam, sukhendu2002, sabernhardt, ugyensupport, mciampini, fushar, rollybueno, shamimmoeen, wildworks, nicoblandel.
Fixes #65445.
Built from https://develop.svn.wordpress.org/trunk@65208
- 19:47 Changeset [64356] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Recover E2E fixtures after interrupted runs.
Remove stale plugin and theme fixtures before each management test, preserving the existing absence and activation assertions. Remove leftover
.maintenanceandfatal-error.phpfixtures before global setup connects to WordPress.
Reuse the fixture cleanup after each test so subsequent runs do not require a manual environment reset.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15369
Props adrianmoldovanwp.
Fixes #66443.
- 17:41 Changeset [64355] by
-
- trunk/wp-includes/version.php
Tests: Wait for editor readiness in media modal tests.
Wait for the post title in the editor canvas before inserting the Image block in
openModalFromImageBlock(). This prevents initial editor setup from resetting the inserted block before the tests can open the media modal.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15372
Props adrianmoldovanwp.
Fixes #66442.
- 17:05 Changeset [64354] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Restore Composer argument forwarding during environment startup.
Forward arguments supplied to
npm run env:start -- ...tocomposer update -W. This restores options such as--dry-run, which stopped reaching Composer when its invocation moved intostart.js.
Follow-up to [65150].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15304
Props adrianmoldovanwp, lucatume.
Fixes #62807.
- 16:56 Changeset [64353] by
-
- trunk/wp-includes/version.php
Tests: Cover image dimension attribute formatting.
Verify
image_hwstring()formats supplied dimensions, omits zero dimensions, and casts numeric strings to integers. Use five provider cases without additional fixtures.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15338
Props shailu25.
See #65819.
- 16:55 Changeset [64352] by
-
- trunk/wp-includes/version.php
Tests: Cover post type lookup from the global post.
Verify
get_post_type()uses the global post when called without an argument. Use a local page fixture and rely on the existing test lifecycle to reset global state.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15343
Props shailu25.
See #65819.
- 16:54 Changeset [64351] by
-
- trunk/wp-includes/version.php
Tests: Cover feed category output and filtering.
Cover RDF category markup, deduplication of category and tag names, Atom attribute escaping, and the arguments and returned value of the
the_category_rssfilter.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15345
Props shailu25.
See #65819.
- 16:53 Changeset [64350] by
-
- trunk/wp-includes/version.php
Tests: Cover feed title filtering.
Verify
get_the_title_rss()passes the post title tothe_title_rssand returns the filtered value. Use a local post fixture and retain existing integration coverage for ordinary feed titles.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15346
Props shailu25.
See #65819.
- 16:52 Changeset [64349] by
-
- trunk/wp-includes/version.php
Tests: Cover default feed selection and feed HTML types.
Verify the default feed, legacy RSS normalization, and the
default_feedfilter. Cover howhtml_type_rss()maps HTML and XHTML content types to feed values.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15336, https://github.com/WordPress/wordpress-develop/pull/15342
Props shailu25.
See #65819.
- 16:51 Changeset [64348] by
-
- trunk/wp-includes/version.php
Tests: Cover comment feed GUID generation.
Verify
get_comment_guid()combines the post GUID with the comment anchor, accepts a comment object, and returnsfalsefor a nonexistent comment.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15339
Props shailu25.
See #65819.
- 16:26 Changeset [64347] by
-
- trunk/wp-includes/version.php
Tests: Cover feed content types and content transformations.
Cover MIME type mappings, unknown feed types, default-feed selection, and the
feed_content_typefilter. Verify content formatting, CDATA terminator escaping, and the arguments and returned value ofthe_content_feed.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15337, https://github.com/WordPress/wordpress-develop/pull/15348
Props shailu25.
See #65819.
- 16:23 Changeset [64346] by
-
- trunk/wp-includes/version.php
Tests: Cover post field sanitization context forwarding.
Verify that
get_post_field()passes the requested context to post field sanitization, using one local post fixture and context-specific filters.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15335
Props shailu25.
See #65819.
- 16:11 Changeset [64345] by
-
- trunk/wp-includes/version.php
Tests: Cover extended post content parsing.
Verify
get_extended()splits content at the more marker, preserves custom more text, trims surrounding whitespace, and leaves an unrecognized marker unchanged.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15341
Props shailu25.
See #65819.
- 16:10 Changeset [64344] by
-
- trunk/wp-admin/plugins.php
- trunk/wp-admin/user-edit.php
- trunk/wp-admin/user-new.php
- trunk/wp-admin/users.php
- trunk/wp-includes/user.php
- trunk/wp-includes/version.php
Code Quality: Declare existing admin globals and simplify variable checks.
Document existing globals in user and plugin administration screens, initialize the remaining redirect and privacy management URL defaults, and remove a redundant old-user-data check from
wp_insert_user().
Remove the corresponding PHPStan baseline entries.
Developed in: https://github.com/WordPress/wordpress-develop/pull/11979
Props huzaifaalmesbah, noruzzaman.
See #65817.
- 16:08 Changeset [64343] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Allow testing and packaging a selected default theme.
Add a theme selector to manual workflow runs, retaining
allas the default and for automatic runs. Derive checks, builds, and ZIP packaging from the selection.
Reject unknown selections and missing selected themes, preserve packaging for themes without build scripts, and separate concurrent runs by branch and theme.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15196
Props abcd95, adrianmoldovanwp, lucatume.
See #66405.
- 16:07 Changeset [64342] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Improve guidance for new contributors.
Add responsible disclosure guidance to the pull request template and welcome message. Explain how to link GitHub and WordPress.org accounts for contribution credit, and clarify the Trac ticket requirement.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15353
Props yashjawale.
See #56897.
- 16:04 Changeset [64341] by
-
- trunk/wp-includes/class-wp-locale.php
- trunk/wp-includes/class-wp-post-type.php
- trunk/wp-includes/version.php
Build/Test Tools: Correct nullable property documentation.
Document that
WP_Locale::$word_count_typeandWP_Post_Type::$templatecan benull, and remove the corresponding PHPStan baseline entries.
Cover the existing REST response normalization of a
nullpost type template to an empty array.
Developed in: https://github.com/WordPress/wordpress-develop/pull/13982
Props huzaifaalmesbah.
See #65817.
- 16:01 Changeset [64340] by
-
- trunk/wp-includes/version.php
Build/Test Tools: Use release ZIPs for installation tests.
Download WordPress release ZIP archives through
wp core downloadto preserve long filenames during extraction. Keep nightly and trunk downloads unchanged.
Pin WP-CLI to
2.12.0for PHP5.6,7.0, and7.1, retaining the existing2.4.0pin for PHP5.4and5.5.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15252
Props adrianmoldovanwp, lucatume.
See #66403.
- 15:55 Changeset [64339] by
-
- trunk/wp-includes/version.php
Tests: Clean test uploads before loading WordPress.
Delete the test uploads directory before loading plugins and themes. Calling
wp_upload_dir()during loading can create and cache the directory; deleting it afterward leaves that cached path missing.
Use PHP filesystem operations before WordPress functions are available, handle Windows directory symlinks, and report directory traversal exceptions.
Follow-up to [65177].
Developed in: https://github.com/WordPress/wordpress-develop/pull/15368
Props oaratovskyi, adrianmoldovanwp.
See #63532.
- 15:54 Changeset [64338] by
-
- trunk/wp-includes/version.php
Tests: Cover posts navigation output and custom arguments.
Verify that
the_posts_navigation()emits navigation with the supplied class, screen-reader text, and accessible label. Reuse the existing post fixture and derive expected links from the configured home URL.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15321
Props devmuhib, huzaifaalmesbah.
See #65819.
- 15:51 Changeset [64337] by
-
- trunk/wp-includes/version.php
Tests: Cover array preservation in string-only unslashing.
Verify that
stripslashes_from_strings_only()leaves an array containing a slashed string unchanged. The existingstripslashes_deep()tests exercise recursive processing instead of this direct-input contract.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15325
Props devmuhib, huzaifaalmesbah.
See #65819.
- 15:50 Changeset [64336] by
-
- trunk/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php
- trunk/wp-includes/version.php
REST API: Remove unreachable featured media update code.
Remove the unreachable
featured_mediablock fromWP_REST_Attachments_Controller::update_item()and its PHPStan baseline entries. The local$schemavariable is never assigned, and the parent controller already handles featured media updates.
Developed in: https://github.com/WordPress/wordpress-develop/pull/13980
Props huzaifaalmesbah.
See #65817.
- 15:42 Changeset [64335] by
-
- trunk/wp-includes/version.php
Tests: Simplify post type removal in attachment permalink tests.
Use
unregister_post_type()instead of manually removing the registry entry when testing an attachment whose parent post type no longer exists. Remove the unused global declaration.
Developed in: https://github.com/WordPress/wordpress-develop/pull/14950
Props rejaulalomkhan, mukesh27.
See #65893.
- 15:41 Changeset [64334] by
-
- trunk/wp-includes/version.php
Tests: Correct block template slug assertion argument order.
Pass the expected slug before the actual value in
test_register_template()so PHPUnit reports failures correctly.
Developed in: https://github.com/WordPress/wordpress-develop/pull/15332
Props noruzzaman, rejaulalomkhan.
See #64895.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)