Ability to Hide Blocks

WordPress 6.9 now includes a built-in feature to hide blocks, making it easy to tuck content away without deleting it. You can now hide blocks: select a blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience., click the ellipsis, and choose “Hide”. Hidden blocks are visually removed from the editor, and fully omitted from the published markup. Scripts and styles for hidden blocks are also omitted from the rendered page by default (see WordPress 6.9 Frontend Performance Field Guide for more details).

To unhide a block, open the List View, identify hidden blocks via the “Hidden” icon next to them, open the ellipsis menu again, and choose “Show”. You can also toggle Hide/Show from the keyboard: use Ctrl + Shift + H on Windows or Linux, + Shift + H on macOS.

How to disable the hide option

Because it is implemented as a standard Block APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. support flag, opting into or out of this capabilitycapability capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). aligns with the rest of the block supports.

The support is enabled by default for every block type except for a short list of coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. blocks. To disable the support selectively, hook into the block_type_metadata() filter, adjust the metadata, and update the supports.visibility flag:

function disable_block_visibility_support( $metadata ) {
	// Disable visibility support for the core/group block.
	if ( isset( $metadata['name'] ) && 'core/group' === $metadata['name'] ) {
		$metadata['supports']['visibility'] = false;
	}
	return $metadata;
}
add_filter( 'block_type_metadata', 'disable_block_visibility_support' );

For additional implementation details and history, see Gutenberg PR #71203.


Props to @joen for co-authoring the note.
Props to @westonruter, @ramonopoly for review.

#dev-notes, #dev-notes-6-9

WordPress Importer can now migrate URLs in your content

Moving a WordPress site has always meant fixing countless broken URLs. The links still pointed to the old domain, the images didn’t load, and the cover blocks lost their background. Not anymore! WordPress Importer now migrates the URLs in your imported content.

A Real Example

Imagine you’re editor-in-chief of https://yummy-🍲-recipes.org/vegan — an imaginary cooking site with vegan recipes. Your reader base is growing, things are going well, but when you meet people in person, they find it difficult to type in that emoji. You decide to move to an all-ASCII domain: https://yummy-cooking-recipes.org/

Your first step is exporting the site content. You go to wp-adminadmin (and super admin), click the right button, export the xml file, and… what is it? Some posts have a really weird-looking markup. Is it because of that pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party you installed last week? Or the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor work you contracted last month? You’re not sure. The markup is not wrong. It is valid HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers., and it renders well in every web browser. It’s just not what you’ve expected:

<!-- wp:cover {"url":"https://yummy-\uD83C\uDF7E-recipes.org/vegan/wp-content/uploads/photo.jpg","align":"left","id":761} -->
<div
	class="wp-block-cover"
	style="
		background-image: url(&#104;ttps:&#x2f;&#x2f;yummy-\u1f372-recipes.org&#x2f;vegan&#x2f;wp-content&#x25;2Fuploads%2Fphoto.jpg);
	"
>
	<div class="wp-block-cover__inner-container yummy-🍲-recipes.org/vegan/-cover">
		<img
			src="&#104;ttps://xn--yummy--recipes-vb87&#x6d;.org/vegan/wp-content/uploads/cover.jpg"
		/>

		<h1>Yummy Vegan Recipes!</h1>

		<p>You are on the official yummy-🍲-recipes.org/vegan site!</p>

		<p>
			Be careful – there is a phishing site you may mistake us for:
			extra-yummy-🍲-recipes.org/vegan/.

			Oh! And our email is: hello@yummy-🍲-recipes.org
		</p>
	</div>
</div>
<!-- /wp:cover -->

You sigh and think Well, that will take some work to adjust. The existing URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org rewriting tools, such as wp search-replace, will catch some URLs but miss most of them. They may alter the warning about the phishing site, which mentions a similar but distinct domain. And then you notice the last WordPress importer release.

WordPress importer now solves this exact problem!

You import your content on the new site with a bit of disbelief. Can it really get it right? You think. But you try it, and, after a brief moment, the import is finished with all the URLs correctly updated:

<!-- wp:cover {"url":"https://yummy-cooking-recipes.org/wp-content/uploads/photo.jpg","align":"left","id":761} -->
<div
	class="wp-block-cover"
	style="
		background-image: url(&quot;https://yummy-cooking-recipes.org/wp-content%2Fuploads%2Fphoto.jpg&quot;);
	"
>
	<div class="wp-block-cover__inner-container yummy-🍲-recipes.org/vegan/-cover">
		<img
			src="https://yummy-cooking-recipes.org/wp-content/uploads/cover.jpg"
		/>

		<h1>WordPress news!</h1>

		<p>You are on the official yummy-cooking-recipes.org/ site!</p>

		<p>
			Be careful – there is a phishing site you may mistake us for:
			extra-yummy-🍲-recipes.org/vegan/.

			Oh! And our email is: hello@yummy-🍲-recipes.org
		</p>
	</div>
</div>
<!-- /wp:cover -->

Isn’t that great?

Breaking down what the importer did

The WordPress importer knows the difference between a URL that needs migrating and an unrelated text that just happens to contain similar characters. Let’s take a closer look at the data migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. we’ve just done.

These parts were migrated:

  • Domain encoded using punycode (xn--yummy--recipes-vb87m.org)
  • JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. with Unicode escapes (yummy-\uD83C\uDF7E-recipes.org)
  • HTML attributes with entities (src="https://xn--yummy--recipes-vb87&#x6d;.org/vegan/wp-content/uploads/cover.jpg")
  • CSSCSS Cascading Style Sheets. with Unicode escapes encoded as an HTML attribute (style="background-image: url(https://yummy-\u1f372-recipes.org/vegan/wp-content%2Fuploads%2Fphoto.jpg);")
  • URLs using %-encoding mixed with HTML entities (&#x25;2Fuploads%2Fphoto.jpg)

These parts stayed exactly as they were:

  • The CSS class yummy-🍲-recipes.org/vegan/-cover. The class name coincides with the domain, but it’s still a unique identifier defined in a stylesheet. Changing it would affect how the site is displayed.
  • The email address hello@yummy-🍲-recipes.org. In this migration, only the website domain changes. Old emails continue to work.
  • The reference to extra-yummy-🍲-recipes.org. It’s a different domain. It would be modified by a simple string replacement, but the WordPress importer recognizes the difference and preserves the original domain.

The WordPress importer parses each data format and encoding, respecting the syntactical nuances, and finds the raw URLs beneath all the layers. All of that happens during the import. The old URLs never make it to the database.

Under the hood, URL rewriting is powered by the new structured data parsers shipped in WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and in the WordPress/php-toolkit repository. BlockMarkupUrlProcessor is the orchestra director coordinating the effort of multiple format-specific parsers such as WP_HTML_Processor, CSSProcessor, CSSURLProcessor, URLInTextProcessor, _wp_scan_utf8, and others.

Because the imported data doesn’t require post-processing, there’s no need to run the traditional UPDATE wp_post SET post_content=REPLACE(old_url, new_url, post_content) queries after the import. This is a big deal. Those queries might be just a minor inconvenience on a small site, but on larger sites, they could take days and lock the most important tables.

If you are interested in even more technical context, see the original Pull Request and the various resources linked in the description.

Try It Out

URL rewriting is available in WordPress Importer 0.9.5 out of the box. You only need to check the checkbox before starting the import:

WP-CLI has an open Pull Request to support this feature.

If you’d like to try it out now, here’s a WordPress Playground demo that imports a content page similar to the example used in this post. You can inspect the imported markup and also go to wp-admin and try importing your own file.

Please share your feedback – it matters a lot! You can share your experience with WordPress Importer in the comments under this post. For any issues and feature requests, feel free to open an issue in the WordPress/wordpress-importer repository.

What’s next?

The WordPress importer improvement roadmap lists several more upcoming features to improve site migrations, such as support for importing large files, concurrent media downloads, or a direct WordPress-to-WordPress site synchronization. You can follow along and share your thoughts in the roadmap issue.

Props to @dmsnell for the major effort he put into the structured data parsers and all his guidance and feedback. Props to @zaerl for his help with reviewing WordPress-importer PRs. Props to @bph for the feedback that helped greatly improve the URL rewriting experience and also for reviewing this post.

Core Committers Check-in – November 2025

This post summarizes key discussions from the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Committercommitter A developer with commit access. WordPress has five lead developers and four permanent core developers with commit access. Additionally, the project usually has a few guest or component committers - a developer receiving commit access, generally for a single release cycle (sometimes renewed) and/or for a specific component. meeting held on November 25, 2025 with project leadership. As with previous check-ins, the goal is to align on key initiatives, gather feedback, and clarify next steps for the WordPress project.

Note: This meeting followed the Chatham House Rule.

Purpose of these meetings

The group briefly discussed what the goals of these meetings are and which groups are ideal to include. Contributors have asked if only committers are invited, or if broader groups are allowed to join as well (component maintainers, team reps, etc.).

After discussing, the following was agreed upon:

  • These meetings are most valuable when committers only attend plus a small group of invited contributors who support that group in establishing and accomplishing project-level goals.
  • This creates a safe space for free, honest, and frank conversations, which is the most prominent reason why these meetings are valuable. 
  • There is certainly value in having more frequent open forums for wider audiences. These should have narrower focuses, and could have guest speakers, and field some questions ahead of time.

Looking ahead: 2026

The next topic of conversation was forward facing around the planning for 2026 and beyond.

Release Planning Post-6.9

The first item related to 2026 planning discussed was to seek clarification on the rough plan for releases going forward.

The main point to underscore out of this discussion is that the intention in 2026 is to return to a cadence of 3 major releases per year. A release in February was proposed, but most felt that was too short.

  • December is really quiet as many people take time off to end the year.
  • February release would mean betaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 very early in January, leaving just over a month for an alpha period.
  • The features that are being worked on would likely not be ready in time for a February release (more on these later).

March or April was suggested, and there was a higher level of confidence in that target.

Lining up the release day of 6.9 with State of the WordState of the Word This is the annual report given by Matt Mullenweg, founder of WordPress at WordCamp US. It looks at what we’ve done, what we’re doing, and the future of WordPress. https://wordpress.tv/tag/state-of-the-word/. is an experiment of a new way to celebrate a release. If it goes well, future major releases could be planned to coincide with flagship events. However, this could be complicated and may require additional planning from leadership and involvement with contributors that help plan release cycles.

  • Events are typically planned around budget, venue availability, and regional factors such as the predominant religious holidays or weather patterns.
  • It could limit options for release squad members due to availability issues because of time zone differences, or for people who are traveling to and from the events leading up to release day.

Targeted release dates are also influenced by the features being targeted for each release. So which features are targeted for 7.0?

Possible Features for 7.0

To start this conversation, features that were removed from or were not ready in time for 6.9 were mentioned. These included:

  • Template activation
  • The tabs blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.
  • Client side abilities for the Abilities APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

This rough draft document was shared. Someone in attendance uses this as a way to track any ongoing UXUX User experience/UIUI User interface improvements, who is responsible, their high-level status, etc. and will be turned into a proper post in the near future.

Some other features explicitly discussed:

  • WP AI Client work
  • Client-side media editing

The status of the adminadmin (and super admin) redesign project was mentioned. The intention of this was clarified. It’s not about completely redesigning the admin area. It’s more about giving it a new coat of paint and refreshing what is already there. How can we revive WP Admin?

  • How can the settings screens be improved?
  • The view transitions pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party is quite nice and makes the admin feel more modern and refreshed.
  • Site Health and the PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher upgrade warning in the dashboard have gotten really scary and overwhelming. How can these be more approachable, useful, and informative?
  • Can the dashboard be used more effectively?
    • The About page is seen by so few people today with many sites auto-updating major releases.
    • Are there new ways to inform the user about an update that happened? Or educate them on how to better take advantage of newly added features?
    • Previously, the welcome widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. was updated with each release, but that practice has stopped.
    • Are there new widgets that can be added, such as “on this day” or “new/unresolved notes” for sites making use of the Notes feature.

WordPress AI Client in Core

Work continues on the AI Client parallel to releases. Because the AI client is a great way to encourage the ecosystem to build around solid foundations (such as the Abilities API), the ideal home for this is Core itself. The combining of these related APIs will unlock so many possibilities for developers and site owners.

  • Core will always remain agnostic. Including a specific model or only integrating with some third-party services is not sustainable.
  • Features can be conditionally available based on the presence of an AI model.
  • Open sourceOpen Source Open Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. models could be used. But oftentimes the experience is bad.
    • Models are quite large.
    • They must download on a per-site basis, which takes time and disk space (even the smallest models are approaching 1GB)
  • Machine-based models such as Apple Intelligence may be an option.

A few more promising initiatives/approaches were discussed.

  1. Browsers are working towards including models within the browser. This means they would already be installed on a user’s machine, and all data stays local.
  2. The W3C WebML working group is working to standardize these tools.

AI can be implemented in a way that browser-based models can be overridden but serve as the fallback/default when no other models or services are configured. In some recent experiments, browser-based models have shown to be very strong when put up against small, state of the art ones.

One exercise that could be helpful is to step back and consider what the use cases are in default WordPress before picking a model. A few possible use cases were mentioned:

  • Searching the media library for specific subject matter within images.
  • Creating a newsletter based on recent content.

An area of improvement for the group is the story being told. How do the tools being built improve WordPress? How do they benefit the user? How does work being done today open the door for empowering functionality later?

A few more ideas were thrown out as ways to improve how well LLMs work with and for WordPress:

  • Improving code base documentation helps LLMs understand the code base better.
  • Including “build for WordPress” as a benchmark within models.
  • Ensure site content and WordPress is accessible for models.
  • Tools like PHPStan and languages such as TypeScript with stricter typing help make the code base more consumable and easier to understand

Raising the minimum required PHP version to 7.4

This conversation focused on the compelling reasons for changing the project’s support policy.

  • Raising the minimum allows the project to move forward with new features.
  • It’s a balance between bringing users with us and not being held back.
  • Not about leaving people behind.
  • PHP 7.4 moves the needle in the direction of being more heavily-typed (see previous TypeScript point above), making it easier for AI models to ingest and understand.
  • There’s a good amount of bloat in the code base that only remains to support older versions of PHP.
  • AI-related SDKs from third-parties have varying minimum PHP requirements. Keeping the minimum required version of PHP too low prevents using some of these.

Understanding Responsible Parties

Throughout the 6.9 release, it was helpful to know who was responsible for or leading efforts for a given feature. It helps the community to better understand where there are gaps and where they can pitch in to help.

When looking at the potential 7.0 features (and beyond), efforts will be made to continue this practice.

Follow Up Action Items

  • Propose additional open/semi-open meeting formats for wider community groups and increased transparency (@4thhubbard & @desrosj).
  • Publish a release schedule for 2026.
  • Determine the targeted features for 7.0 (and possibly 7.1).
  • Consider what would be needed to regularly coordinate release days to coincide with in-person events.

The agenda and raw notes for this meeting are available in Google Docs.

Props @4thhubbard for review.

#committers, #core-committer-meetings

WordPress 6.9 Field Guide

Edit 11/25/25: The Miscellaneous Editor Changes developer note was published after the Field GuideField guide The field guide is a type of blogpost published on Make/Core during the release candidate phase of the WordPress release cycle. The field guide generally lists all the dev notes published during the beta cycle. This guide is linked in the about page of the corresponding version of WordPress, in the release post and in the HelpHub version page.. It has been added below.

This guide outlines major developer features and breaking changes in 6.9 and is published in the Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). phase to help inform WordPress extending developers, CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. developers, and others.

There are more than 400 Core Trac tickets included in WordPress 6.9, over 125 of which are enhancements and feature requests, and more than 250 bug fixes. This release includes 35+ tickets focused on the Editor, 15 tickets focused on wp-admin, and over 45 tickets focused on performance.

Additionally, this release includes 440 enhancements and more than 570 bug fixes for the BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Editor, Site Editor, DataViews, and other related Core APIs.

Below is a breakdown of the most important developer-related changes included in WordPress 6.9.


Table of contents


New Ways to Collaborate

Creating and managing content with WordPress 6.9 is more versatile, with new tools and features that encourage collaboration and increase the ease of use. Users can now add notes to blocks, and can take advantage of optimized DataViews and a command palette implemented across wp-admin.

Notes

In WordPress 6.9 editors can write notes and reply to others directly at the individual block level, allowing teams to collaborate, track changes, and provide feedback during the editing process. Notes can be resolved, edited, deleted, and email notifications are sent to the post author when a new one is left.

Updates to Field APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways., DataViews and DataForms Components

This release also comes with upgrades to the Field API as well as the DataViews and DataForms components.


In the Field API the field type has been expanded to include more than 10 new field types, 11+ edit controls that support validation, over 16 filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. operators and user-input filters in filterBy, readOnly options to disable field editing, and so much more. Updated DataViews functions include improvements to modals and text-based actions, infinite scroll, and the ability to build custom layouts with children that leverage DataViews’ internal state management and data handling logic. DataViews also now persists via @wordpress/views while DataForms now has an improved panel, new card and row layouts, and revamped controlled validation.

Improved Editing Tools and Architecture

WordPressers can now drag and drop blocks more easily, hide blocks with a click, and use the new WP_Block_Processor class to convert documents into a block structure, while page architecture is improved with the continued integration of iframes.

Direct Drag and Drop

Drag and drop has been improved, with the ability to directly move blocks around within the site editor instead of a drag chip, for a faster, easier, and more intuitive editing experience.

Ability to Hide Blocks

WordPress 6.9 allows editors to hide and reveal blocks with a simple click.

Iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. Integration in Post Editor

As part of an ongoing initiative to move the post editor into an iframe, a few changes have been made to help with this transition:

  1. The block.json schema now only allowsapiVersion 3 for new or updated blocks.
  2. A warning will be displayed in the browser console when a block is registered usingapiVersion 1 or 2

These changes aim to help developers migrate their blocks to use apiVersion 3 with the plan to fully place the editor within an iframe in WordPress 7.0. While this change has been researched and tested at length, additional testing is needed by block and pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party developers to make any necessary improvements in future releases.

Streaming Block Parser

WordPress 6.9 includes a new WP_Block_Processor tool for scanning block structure in HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. documents. The new class walks through the document to analyze or adjust the block structure while showing a structural view without affecting text, converting documents into a nested array of block information and parsed JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. attributes.

New Blocks and Block Improvements

An expanded block library with new and upgraded blocks is bundled into 6.9, which includes a new math block, new accordion block, terms query block, comments link and comments count blocks, and improved heading and time to read blocks. This release also contains modified text editing abilities with fitText block support that enables automatic font size adjustment to fit text within its container boundaries (and much more).

Perform Calculations using π in the Math Block

The new Math block adds support for MathML and LaTeX renderers to display math in either block or inline mode, which can be added in any rich text field including tables, headings, and lists.

Collapsible Content with the new Accordion Block

The new Accordion Block in 6.9 supports custom styling and pattern capabilitiescapability capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability).. Learn how to style accordion blocks here.

Heading Block CSSCSS Cascading Style Sheets. Specificity Fix

6.9 includes a refined CSS selector for padding in headings that have a background, which now targets headings with both.wp-block-heading and.has-background classes to ensure padding customizations affect only the intended block.

New & Improved APIs

Meet the Abilities API

The Abilities API enables WordPress Core, plugins, and themes to register their functionality in a unified, standardized, machine-readable format. The Abilities API is part of the broader AI Building Blocks for WordPress initiative to build the tools needed for extenders to integrate AI tools into WordPress in a native way.

Updates to Interactivity API

In WordPress 6.9 the Interactivity API now offers a standardized way to assign unique IDs to Interactivity API directives, allowing website elements to be given multiple similar directives without conflicts. The getServerState() and getServerContext() functions have been updated, and a new algorithm optimizes script and stylesheet handling, enhanced support for router regions in interactive elements, and adds a new attachTo property that acts as a CSS selector pointing to the parent element for router rendering.

Updates to HTML API

The HTML API has been refined in 6.9, with multiple bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes and enhancements. The WP_HTML_Processor::serialize_token()is now public, extending the safety of the HTML API to outside code modifying and combining HTML, while set_modifiable_text() now rejects SCRIPT element contents that could disturb its normal closing.

Improved Block Binding API

The updated Block Bindings interface in 6.9 focuses on usability, with the added ability to switch between sources, and bind or unbind attributes with a single click, while the new block_bindings_supported_attributes_{$block_type}filter facilitates customizing how a block’s attributes connect to a Block Bindings source.

Optimized Performance

WordPress 6.9 delivers significant performance improvements designed to improve the site loading experience for visitors. Improvements to LCP (Largest Contentful Paint) metric are achieved by implementing on-demand block styles for classic themes, minifying block theme styles, and increasing the limit for inline styles—all of which reduce render blocking. The critical rendering path is decongested by deprioritizing non-critical scripts (e.g. for interactive blocks and emoji detection) which had competed with loading resources like the LCP element’s image. Page stability is also improved by preventing the Video block from causing layout shifts.

Many other enhancements are shipped, such as optimized database queries, improved caching, better spawning of WP Cron, and a new template enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. output buffer which opens the door for many future optimizations which were previously impossible.

Modernizing UTF-8 Support

A new fallback pipeline written in PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher enables WordPress 6.9 to process text encoding and UTF-8 handling independently of the running environment, bringing more reliability across WordPress environments and for themes and plugins that work with international content, emojis and the like.

Updated Query Cache Handling

The 6.9 release changes how cache keys are created when caching queries performed through WP_Query. While persistent object cache drop-ins should not be affected, developers and web hosts should make note of the changes and take advantage of the four new functions introduced.

Remove Support for Loading Assets Conditionally for IE

WordPress 6.9 removes support for enqueing scripts and styles with legacy conditional statements that target specific versions of Internet Explorer conditional. All remaining related checks have also been removed from the default themes, an effort that began in #56699. The code related to Genericons has also been updated for themes that included this webfont.

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) Updates

WordPress 6.9 includes 10 enhancements and 23 bug fixes focused on accessibility, offering new and improved screen reader notifications, improved semantics and focus management, and updated CSS generated content to prevent excess content from being read.

PHP 8.5 Support

WordPress 6.9 has added “betaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. support” for PHP 8.5, addressing all known incompatibilities, warnings, and notices while maintaining support for older PHP versions (currently 7.2 and up). As a reminder, “Beta support” is a label applied to versions of PHP that have less than 10% usage across all WordPress sites.

Miscellaneous Developer Changes

A range of additional developer-related updates improve both the user experience and the development experience. These changes span various areas of WordPress Core, including media, multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site, new hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same., and browser interactions. While individually minor, they collectively reflect ongoing efforts to enhance usability in WordPress and provide a more predictable and flexible foundation for developers.

Miscellaneous Editor Changes

The 6.9 release also brings a number of miscellaneous developer-focused changes within the Block Editor. Be sure to read this dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. so you’re up to speed!

Updated Adminadmin (and super admin) Menu Search Query

In WordPress 6.9, the search query used by the admin menu has changed from $_SERVER['QUERY_STRING'] to $_GET. This makes the search behavior more predictable and avoids issues caused by depending on the raw query string. Extensions that override or inspect admin menu search behavior should review any assumptions about how the menu search value is retrieved.

Additional Support for HTTPSHTTPS HTTPS is an acronym for Hyper Text Transfer Protocol Secure. HTTPS is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. The 'S' at the end of HTTPS stands for 'Secure'. It means all communications between your browser and the website are encrypted. This is especially helpful for protecting sensitive data like banking information. in URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org-escaping Functions

In WordPress 6.9, the esc_url(), esc_url_raw() and sanitize_url() functions can now be configured to prepend https:// to a URL that does not already contain a scheme by default when the first item in the $protocols array is 'https'.

Improved Email Handling and Inline Image Support

WordPress 6.9 introduces several updates that make the email system more reliable and more flexible for developers. The wp_mail() function now sets sender addresses in an extensibleExtensible This is the ability to add additional functionality to the code. Plugins extend the WordPress core software. way, protects encoding headers between calls, and leans more consistently on PHPMailer for content type handling. Many long standing bugs around headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. handling and message formatting have also been resolved.

This release also adds support for inline and embedded images in HTML emails, allowing developers to send richer message templates without relying on external image URLs. Email content that uses cid: based references can now render images directly inside the message, opening up cleaner options for branded notifications, transactional emails, and plugin generated workflows.

PHP AI Client

The new PHP AI Client SDK facilitates integration of AI abilities with plugins and PHP projects. The interface works with all AI providers, and developers can specify which AI abilities to include, which provider, and which model to use. Credentials are centrally managed and work across all compatible plugins.

MCP Adapter

The new MCP Adapter utilizes Model Context Protocol (MCP) to standardize the application’s interactions with LLMs, expose abilities to AI assistants, and connect with other MCP servers. This allows WordPress to act as both server and client, registering its capabilities through the Abilities API for AI assistants to discover and use, while also integrating with other MCP servers, making it possible to leverage external AI tools within WordPress.

But wait, there is more!

6.9 offers so much more!  More than 250 bugs, 123 enhancements and feature requests, and 22 blessed tasks have been marked as fixed in WordPress 6.9.

Below are a few more to highlight:

  • Abilities API: Roadmap to WP 6.9: defining and deciding (AI-83)
  • Accessibility: Navigation block: fix submenu Escape key behavior (GB-69834)
  • Editor: Button Block: Add HTML Element selection in Advanced settings  (Accessibility) (GB-70139)
  • Editor: Enable the Command Palette everywhere in admin dashboard (GB-58218)
  • Editor: New block additions for the Block Library (GB-71026)
  • Editor: Toolbar: Adjust colors for dark mode support  (GB-66454)
  • General: Replace deprecated / non-standard CSS for speak and aural (accessibility) (GB-63603)
  • Global Styles: Move Randomize colors button to Edit Palette panel (GB-66169)

Thank you to everyone who contributed to this version of WordPress, whether through code, testing, or something else – your contributions matter and help Make WordPress.

Props to @desrosj, @jorbin, @sabernhardt, @joedolson, @priethor, @jeffpaul, @westonruter, @davidbaumwald, @akshayar, and @annezazu for review.

#6-9, #field-guide

Coding Standard Proposal: Make it explicit that PHP files must use the .php extension

The current WordPress Coding Standard does not specify which file extensions should be used for PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher files. This proposal establishes that only the .php file extension should be allowed for PHP files.

Motivation

While web servers like ApacheApache Apache is the most widely used web server software. Developed and maintained by Apache Software Foundation. Apache is an Open Source software available for free. and NginxNGINX NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers. https://www.nginx.com/. can be configured to execute files with various extensions as PHP (e.g., .php3 and .phtml), the .php extension is the only one universally supported. If PHP files do not use the .php extension, there is a risk that scripts will not work on some web servers. For example, a default Debian installation using Apache and mod_php parses .php, .phtml, and .phar as PHP, whereas a default Fedora installation using Apache and mod_php parses only .php and .phar as PHP. This means that a pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party using .phtml file extensions will work on Debian, but not on Fedora (and may inadvertently render code in plain text). Therefore, for code portability, compatibility, and security, it should be agreed and checkable that only .php extensions are used for PHP files.

Another benefit of the change proposed here is that if all PHP files use the .php extension, we can be sure that they will be checked by tools like PHPCSPHP Code Sniffer PHP Code Sniffer, a popular tool for analyzing code quality. The WordPress Coding Standards rely on PHPCS..

Proposed change to the handbook

Add a new item to the General section of the PHP Coding Standard Handbook as follows:

Title: File Extension

Content: PHP files must use the .php file extension.

References

This was originally proposed by Gary Jones in this WPCS issue.

#codingstandards, #php, #wpcs

Props @dingo_d, @garyj, and @jrf for reviewing this post.

Block Bindings improvements in WordPress 6.9

For WordPress users.

The BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Bindings user interface has been upgraded to improve how different data sources are displayed in the editor.
Users can now easily switch between sources, as well as bind and unbind attributes with a single click.

For WordPress developers.

On the server

A new filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.block_bindings_supported_attributes_{$block_type}, allows developers to customize which of a block’s attributes can be connected to a Block Bindings source.

On the editor

Developers can now register custom sources in the editor UIUI User interface by adding a getFieldsList method to their source registration function.

This function must return an array of objects with the following properties:

  • label (string): Defines the label shown in the dropdown selector. Defaults to the source label if not provided.
  • type (string): Defines the attribute value type. It must match the attribute type it binds to; otherwise, it won’t appear in the UI.Example: An id attribute that accepts only numbers should only display fields that return numeric values.
  • args (object): Defines the source arguments that are applied when a user selects the field from the dropdown.

This is an example that can be tried directly in the console from the Block Editor:

wp.blocks.registerBlockBindingsSource({
	name: 'state-word/haikus',
	label: 'Haikus',
	useContext: [ 'postId', 'postType' ],
	getValues: ( { bindings } ) => {

	        // this getValues assumes you're on a paragraph
		if ( bindings.content?.args?.haiku === 'one' ) {
			return {
				content:
					'Six point nine arrives,\nBlock bindings bloom like spring flowers,\nEditors rejoice.',
			};
		}
		if ( bindings.content?.args?.haiku === 'two' ) {
			return {
				content:
					'New features unfold,\nPatterns dance with dynamic grace,\nWordPress dreams take flight.',
			};
		}
		if ( bindings.content?.args?.haiku === 'three' ) {
			return {
				content:
					"December's gift shines,\nSix nine brings the future near,\nCreators build more.",
			};
		}
		return {
			content: bindings.content,
		};
	},
	
	getFieldsList() {
		return [
			{
				label: 'First Haiku', 
				type: 'string',
				args: {
					haiku: 'one',
				},
			},
			{
				label: 'Second Haiku', 
				type: 'string',
				args: {
					haiku: 'two',
				},
			},
			{
				label: 'Third Haiku', 
				type: 'string',
				args: {
					haiku: 'three',
				},
			},
		];
	},
} );

After executing the code above, when inserting a paragraph, a new UI selector for the Block Binding should be available for the content attribute of the paragraph.

Additional Information

More information can be found on the related tickets, changesets, and pull requests:

  • TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. ticketticket Created for both bug reports and feature development on the bug tracker.: #64030
  • Changeset: [60807]
  • gutenberg repository pull request: PR-71820
  • gutenberg pull request the idea originated from: PR-70975

Props: @bernhard-reiter and @cbravobernal for implementation. @juanmaguitar for peer review and providing examples.

#6-9, #block-bindings, #dev-notes, #dev-notes-6-9

Interactivity API’s client navigation improvements in WordPress 6.9

In WordPress 6.9, the client-side navigation feature provided by the @wordpress/interactivity-router module has been expanded to cover additional use cases that were previously unsupported.

Support for new script modules and stylesheets

Previously, only the HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. of the new page was updated, keeping the styles present in the initial page and ignoring any new script modules. This worked for basic client-side navigation cases, but it didn’t handle more complex situations, such as when new blocks appear on the next page.

With this update, WordPress now replaces stylesheets and loads any script modules after client-side navigation.

  • The new algorithm reuses the stylesheets shared with the previous page to minimize networknetwork (versus site, blog) requests, loads any new stylesheet not present in the previous navigations, and disables those that no longer apply.
  • The new algorithm also loads all the script modules belonging to interactive blocks that didn’t exist on the previous pages. To correctly support module dependencies, new importmap definitions are also supported.
  • To maintain the experience of instant navigations, prefetching a page also prefetches all the stylesheets and script modules that were not previously prefetched or loaded.

For details on the implementation, see #70353.

Support for router regions inside interactive elements

Router regions are those elements marked with the data-wp-router-region directive. When the navigate() action from @wordpress/interactivity-router is invoked, the content of these regions is updated to match the newly requested page.

In previous WordPress versions, router regions needed to match a root interactive element (i.e., one of the top-most elements with a data-wp-interactive directive). This meant that if the data-wp-router-region directive was used anywhere else in an interactive region, its content wouldn’t be updated.

<div data-wp-interactive="example">
    <button data-wp-on--click="actions.doSomething">Click me!</button>
    <div
      data-wp-interactive="example"
      data-wp-router-region='example/region-1'
    >
      I wasn't updated on client navigation (now I am!)
    </div>
</div>

Now, router regions are updated whenever they are placed in an interactive region. The only requirement is that they must still be used alongside the data-wp-interactive directive so they receive the corresponding namespace.

For more details, refer to the related issue #71519 and pull request #71635.

New attachTo option for router regions

In WordPress 6.9, router regions accept an attachTo property that can be defined inside the data-wp-router-region directive, allowing the region to be rendered even when it was missing on the initial page. This option supports cases like overlays that are necessary for a blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience., but may appear outside all the regions.

The attachTo property should be a valid CSSCSS Cascading Style Sheets. selector that points to the parent element where the new router region should be rendered. For example, the following router region would be rendered in <body> if it appears on a visited page, even if it wasn’t initially rendered.

<div
  data-wp-interactive="example"
  data-wp-router-region='{ "id": "example/region", "attachTo": "body" }'
>
  I'm in a new region!
</div>

See #70421 for more details.

Improved getServerState and getServerContext functions

When using the Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. with client-side navigation, the getServerState() and getServerContext() functions now properly handle the following scenarios:

  1. Properties that are modified on the client but should reset to server values on navigation
    Now, whenever getServerState or getServerContext is tracking a value that doesn’t change after a client-side navigation, it will still trigger an invalidation so that it can be used to reset values, such as:
   const { state } = store( 'myPlugin', {
    // ...
    callbacks: {
        resetCounter() {
            const serverState = getServerState(); // Always { counter: 0 };
            state.counter = serverState.counter; // Reset to 0;
        },
    },
   } );
  1. Properties that only exist on certain pages
    Server state and contexts are now fully overwritten: only the properties present on the current page are retained, and those from previous pages are removed. This allows having the certainty of knowing if a property doesn’t exist in the server state, even if it was present on the previous page.
   store( 'myPlugin', {
    // ...
    callbacks: {
        onlyWhenSomethingExists() {
            const serverState = getServerState();
            if ( serverState.something ) {
                // Do something...
            }
        },
    },
   } );

Additionally, these functions now include proper type definitions and error messages in debug mode, among other improvements.

See #72381 for more details.

Props to @darerodz and @luisherranz for the implementations.

#6-9, #dev-notes, #dev-notes-6-9, #interactivity-api

Preparing the Post Editor for Full iframe Integration

As part of an ongoing effort to modernize the editing experience, WordPress is moving toward running the post editor inside an iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.. This work builds upon the original iframe migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. in the template editor and introduces new compatibility measures in WordPress 6.9, ahead of the full transition planned for WordPress 7.0.

For background, see the original post.

What’s Changing in WordPress 6.9

Starting with WordPress 6.9, several important updates have been introduced to prepare for this change, which will be completed in WordPress 7.0.

Browser console warnings for legacy blocks

To help developers identify legacy blocks, WordPress 6.9 now displays a warning in the browser console when a blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. is registered with apiVersion 2 or lower. This serves as an early signal to update existing blocks before the post editor becomes fully iframed in WordPress 7.0.

When a block is registered with apiVersion 2 or lower, the post editor runs in a non-iframe context as before to maintain backward compatibility. Developers are encouraged to migrate their blocks to apiVersion 3 and test them within the iframe-based editor to ensure full compatibility with future WordPress releases.

See #70783 for more details.

block.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. schema now only allows apiVersion: 3

Alongside these compatibility measures, the block.json schema has been updated to only allow apiVersion: 3 for new or updated blocks. Older versions (1 or 2) will no longer pass schema validation.

See #71107 for more details.

Why iframe the Post Editor?

The main goal of iframing the editor is isolation. By loading the editor content within an iframe, styles from the WordPress adminadmin (and super admin) no longer interfere with the editor canvas.

This separation ensures that the editing experience more closely mirrors what users see on the front end.

From a technical perspective, the iframe approach offers several benefits:

  • Admin styles no longer leak into the editor, eliminating the need to reset admin CSSCSS Cascading Style Sheets..
  • Viewport-relative units (vwvh) and media queries now behave naturally within the editor.

The iframed Post Editor will make life easier for block and theme authors by reducing styling conflicts and improving layout accuracy.

Props to @mamaduka for helping review this dev-note.

#6-9, #dev-notes, #dev-notes-6-9

Dev Chat Agenda – November 26, 2025

The next WordPress Developers Chat will take place on Wednesday, November 26, 2025, at 15:00 UTC in the core channel on Make WordPress Slack.

The live meeting will focus on the discussion for upcoming releases, and have an open floor section.

The various curated agenda sections below refer to additional items. If you have ticketticket Created for both bug reports and feature development on the bug tracker. requests for help, please continue to post details in the comments section at the end of this agenda or bring them up during the dev chat.

Announcements 📢

WordPress 6.9 Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). 3 is now available!

WordPress 6.9 Release Candidate 3 is now available for download and testing.
Further information you can find here.

6.9 Release Day Timeline Shift

Please note that the release preparation timeline for WordPress 6.9 has been adjusted.
A revised schedule is now in place, aligned with the State of the Word on December 2.
A detailed overview of the updated timeline is available here.

WordPress 6.9 Dev Notesdev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase.

For more detailed information, see the following WordPress 6.9 Dev Notes:

Forthcoming releases 🚀

WordPress 6.9 Timeline

WordPress 6.9 is planned for December 2, 2025.

Call for Testing 

The Test Team invites testing and feedback on the following upcoming blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor features:

Discussions 💬

The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Team. To nominate a topic for discussion, please leave a comment on this agenda with a summary of the topic, any relevant links that will help people get context for the discussion, and what kind of feedback you are looking for from others participating in the discussion.

Browser Support Policy – Core/Adminadmin (and super admin) vs. Frontend

@joedolson proposes clarifying the distinction between our browser support policies for Core/Admin and for front-end output. Several recent cases have shown that the current scope is not consistently understood, especially in the context of ongoing FSE development. The goal is to determine how far our official support is expected to extend in each area. (See #64266, #64015)

Open floor  🎙️

Any topic can be raised for discussion in the comments, as well as requests for assistance on tickets. Tickets in the milestone for the next major or maintenance release will be prioritized.

Please include details of tickets / PRs and the links in the comments, and indicate whether you intend to be available during the meeting for discussion or will be async.

#6-9, #agenda, #core, #dev-chat

Accessibility Improvements in WordPress 6.9

WordPress 6.9 brings extensive accessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) improvements across WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/, continuing the goals to meet web content accessibility standards throughout WordPress and make it easier to author accessible content. These updates include changes to administration, customization, login and registration, bundled themes, and the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor.

Core

Improvements to WordPress Core include 33 accessibility enhancements and bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes. Major changes include numerous new or improved screen reader notifications, a complete update of CSSCSS Cascading Style Sheets. generated content to ensure no excess content is spoken, and code changes to ensure proper semantics and improved focus management.

Administration

  • #47101 – Improve accessibility when deleting terms via AJAX: color contrast & spoken message.
  • #48655 – Improve the “Add-item” function in menus (esp. for pages)
  • #63118 – Hide “Skip to Toolbar” shortcut on small screens within adminadmin (and super admin)
  • #63126 – Theme preview model and Media library model having issues with Shift/Ctrl + Shift next and previous arrows.
  • #63449 – Low color contrast for <code> elements in description text on Settings > General page
  • #63546 – Fix unclosed li element in pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party-editor.php
  • #63603 – Replace deprecated / non-standard CSS for `speak` and `aural`
  • #63723 – On the Add New plugin page, put the Add Plugins screen description above the filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. menu

CustomizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings.

  • #42078 – Customize: fix the color hue picker HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. and accessibility
  • #47579 – Customizer “Select logo” and “Select site icon” look like drop areas, but are buttons.
  • #50696UIUI User interface & Accessibility issues in customizer menus section
  • #63011 – Customizer: The back button is not keyboard focusable
  • #63832 – Loss of focus when setting or changing the Site Logo or Site Icon in Customizer

Editing

  • #63460 – Increase color contrast for embed template
  • #61959 – Enhance Support for `popovertarget` and `popover` Attributes in Native Browser Popover APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

Login and Registration

  • #63281 – Password field has wrong focus on installations
  • #63286 – User profile first name, last name, nickname and email fields should have autocomplete attributes for accessibility
  • #48345 – Add Caps lock message to login screen

Media

  • #63114 – No screen reader announcements for upload image errors
  • #63238 – Remove `target=”_blank”` from Browser Uploader Link
  • #63239 – Button focus visibility issue in media upload page
  • #63571 – Excessive Spacing Between Right SidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. Items in Edit Media Screen on Mobile View
  • #63973 – Add Media Button missing aria-haspopup and aria-controls

Miscellaneous

  • #40428 – Introduce best practices to hide CSS generated content from assistive technologies
  • #44267 – Privacy Request List Table: A way to show the time of request when it’s older than 24 hours.
  • #63030 – Update CSS for `::-moz-placeholder` color
  • #63620 – Remove translator comments when hidden text matches visible text
  • #63950 – Tabbing through database upgrade screen shows “WordPress” text over logo

Bundled Themes

  • #10219 – “Older Entries” and “Newer Entries” links are wrong when entries displayed in ascending order
  • #44656 – Multiple themes: Empty site title leaves empty anchor tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) in headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.
  • #52116 – Twenty Twenty: Menu + Search can cause a scroll jump on close
  • #63875 – Twenty Twenty-Two and Twenty Twenty-Five: <pre> tag overflows container, causing horizontal scroll

Widgets

  • #63531CategoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. dropdown does not meet WCAGWCAG WCAG is an acronym for Web Content Accessibility Guidelines. These guidelines are helping make sure the internet is accessible to all people no matter how they would need to access the internet (screen-reader, keyboard only, etc) https://www.w3.org/TR/WCAG21/. 2.2 A on windows and some linux systems

Gutenberg

Changes within Gutenberg include 44 accessibility fixes and enhancements, including the addition of new blocks and the block Notes feature that have undergone accessibility reviews. Numerous fundamental components have had accessibility improvements to ensure that interfaces across the editor are more consistent and understandable. 

Blocks

  • #68662 – Cover: Fix placeholder color options keyboard accessibility
  • #68909 – Site Title: Fix logic for ‘aria-current’ attribute
  • #69628 – Site Title: Prevent saving and rendering a value made of only spaces
  • #69689 – Navigation Link, Navigation Submenu: Remove the title attribute controls
  • #69821 – Social Icons: Remove custom placeholder state
  • #69837 – Navigation block: fix submenu Escape key behavior
  • #70139 – Button Block: Add HTML Element selection in Advanced settings
  • #70192 – Button: Avoid focus loss when unlinking using keyboard
  • #70210  – Columns block: Don’t use ToolsPanelItem for Columns setting
  • #70730a11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): Comments Pagination Nav Wrapper
  • #64119 – Add Accordions Block
  • #73177 – Fix a11y of descriptions and alerts for “Invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid.” Nav Items

Components

  • #67792 – Improve the EntitiesSavedStates modal dialog design and labeling
  • #69011 – Remove non translatable additional info from font size picker visual label and improve labeling
  • #69441 – ARIA: Fix invalid `DropdownMenu` children structure
  • #68633 – Global Styles: Prevent Unwanted ItemGroup List Rendering in Border Panel
  • #68542 – Button: Update hover styles to account for pressed state for `tertiary button`
  • #69609 – ActionModal: Add support for customisable `focusOnMount`
  • #69904 – Add new HTMLElementControl component
  • #70591 – `FormTokenField`: Fix focus lost on tab when `__experimentalExpandOnFocus` is set
  • #70096 – Components: Fix label and placeholder handling in `LinkControlSearchInput`
  • #70660 – Autocomplete: Prevent text cursor position loss when clicking to insert an item
  • #70146 – Color Picker: Improve color picker slider focus styles

Data Views

  • #67874 – Display Checkbox by default in dataviews
  • #69876 – DataViews: Always show primary action for list layout if hover isn’t supported
  • #71561 – DataViews: Custom `empty` elements are no longer wrapped in `<p>` tags to improve accessibility
  • #72417 – DataViews: Use Text-Based Links for Primary Actions
  • #72501 – Dataviews: Make bulk actions text based.

Editor

  • #68481 – Fix CSS classes for the post editor iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. body.
  • #68975 – Close patterns modal on insertion and focus on inserted pattern
  • #69305 – Swap fullscreen mode snackbar notice message.
  • #69334 – InputControl: Ensure consistent placeholder color
  • #69378 – Button: Remove fixed width from small and compact buttons with icons
  • #69451 – Editor: Refactor the ‘PostVisibility’ component
  • #69520 – Fix shift+tab from post title
  • #69724 – Post Template Panel: Preserve parent modal when closing template creation dialog
  • #68631 – Global Styles: Fix incorrect usage of ItemGroup in the Background image panel
  • #69813 – Background Image Panel: fix focus loss
  • #70128 – Global Styles: Move `Randomize colors` button to Edit Palette panel
  • #70133 – Editor: Add label in`TextareaControl` in CollabSidebar
  • #69278 – Toolbar: Adjust colors for dark mode support
  • #70451  – feat: clarify label & add help text with link for Link Rel

Miscellaneous

  • #69440 – Make password protected input fields consistent.
  • #70091 – Templates: Add back button & fix focus loss when navigating through template creation flow

Acknowledgements

Props to @jorbin and @jeffpaul for reviewing this post.

#6-9, #accessibility, #dev-notes, #dev-notes-6-9