Breadcrumb block filters

WordPress 7.0 introduces a new Breadcrumbs 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. that can be placed once — such as in a theme’s 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. — and automatically reflects the site’s navigation hierarchy.

Breadcrumbs block in a header template part using Twenty Twenty-Five theme, here showing the trail for a child page

Two filters provide developers with control over the breadcrumb trail output.

block_core_breadcrumbs_items

This 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. allows developers to modify, add, or remove items from the final breadcrumb trail just before rendering. Each item is an array with three properties:

  1. label (string) — the breadcrumb text.
  2. an optional url (string) — the breadcrumb link URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org.
  3. an optional allow_html (bool) — whether to allow HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. in the label. When true, the label will be sanitized with wp_kses_post(), allowing only safe HTML tags. When false or omitted, all HTML will be escaped with esc_html().

Example: Prepend a custom breadcrumb item

  add_filter( 'block_core_breadcrumbs_items', function ( $breadcrumb_items ) {
        array_unshift( $breadcrumb_items, array(
                'label' => __( 'Shop', 'myplugin' ),
                'url'   => home_url( '/shop/' ),
        ) );

        return $breadcrumb_items;
  } );

block_core_breadcrumbs_post_type_settings

When a post type has multiple taxonomies or when a post is assigned to multiple terms within a taxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies., there could be numerous ways to construct the breadcrumbs trail. For example in a post that has both categories and tags a user might want to show in the breadcrumbs trail the categories (default), the tags and/or select a specific 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.).

This filter controls which taxonomy and terms appear in the Breadcrumbs block trail for posts that use taxonomy-based breadcrumbs. It applies to non-hierarchical post types (e.g., posts, products) or hierarchical post types when the block’s “Prefer taxonomy terms” setting is enabled (under advanced settings). It does not affect hierarchical ancestor-based trails (e.g., parent/child pages).

The filter receives three parameters:

  • $settings (array) — an empty array by default. Callbacks should populate the array and return it with the following optional keys:
    • taxonomy (string) — taxonomy slug to use for breadcrumbs.
    • term (string) — term slug to prefer when the post has multiple terms in the selected taxonomy.
  • $post_type (string) — the post type slug.
  • $post_id (int) — the post ID, enabling per-post customization.

Fallback behavior

  • If the preferred taxonomy doesn’t exist or has no terms assigned, fall back to the first available taxonomy with terms assigned.
  • If the preferred term doesn’t exist or isn’t assigned to the post, fall back to the first term
  • If the post has only one term, that term is used regardless of setting

Example 1: Set a preferred taxonomy and term per post type

add_filter( 'block_core_breadcrumbs_post_type_settings', function( $settings, $post_type ) {
	if ( $post_type === 'post' ) {
		$settings['taxonomy'] = 'category';
		$settings['term'] = 'news';
	}
	if ( $post_type === 'product' ) {
		$settings['taxonomy'] = 'product_tag';
	}
	return $settings;
}, 10, 2 );

Example 2: Choose a specific term per post

add_filter( 'block_core_breadcrumbs_post_type_settings', function ( $settings, $post_type, $post_id ) {
	if ( $post_type !== 'post' ) {
		return $settings;
	}
	
	$terms = get_the_terms( $post_id, 'category' );

	if ( $terms ) {
		$settings['taxonomy'] = 'category';
		$settings['term']     = end( $terms )->slug;
	}

	return $settings;
}, 10, 3 );

See 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/ pull requests: 74169, 73283, 74170.

Props to @karolmanijak, @ntsekouras for the implementation.

Props to @karolmanijak for technical review.

Props to @mcsf for copy review.

#dev-notes, #dev-notes-7-0

Customisable Navigation Overlays in WordPress 7.0

WordPress 7.0 introduces Customisable Navigation Overlays, giving site owners full control over their mobile navigation menus using 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.

Previously, when a visitor tapped a hamburger menu icon on a mobile device, WordPress displayed a fixed default overlay with no support for customisation. The design, layout, and content were locked.

Customisable Navigation Overlays remove this restriction entirely — any overlay can now be built from blocks and patterns in the Site Editor. This includes a dedicated Navigation Overlay Close block for placing and styling a close button anywhere within the overlay.

How overlays work

Navigation overlays are implemented as template parts using a new navigation-overlay template part area, managed principally through the Navigation block’s overlay controls in the Site Editor. Because they are template parts, they can also be found and edited via the Patterns section in the Site Editor 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.. Each overlay is assigned to a Navigation block — while the same overlay can be referenced by more than one, a one-to-one relationship is the most common pattern.

What goes inside an overlay is entirely up to the author. As a standard block canvas, it can contain any block — navigation, social icons, a search field, a site logo, calls to action…or any combination! A Navigation block is the typical inclusion but is not a requirement. Because overlays only function correctly when rendered by a Navigation block, overlay template parts are intentionally excluded from the general block inserter — this prevents them from being inserted accidentally into other parts of a template.

The feature is opt-in: by default, the Navigation block continues to use the standard overlay behaviour from previous versions of WordPress. A custom overlay can be activated in three ways:

  • Creating a new overlay — via the Overlays section in the Navigation block’s sidebar controls in the Site Editor
  • Selecting an existing overlay — from the same controls, choosing from any overlays already created or bundled with the active theme
  • Theme pre-assignment — a theme can reference a bundled overlay directly in the Navigation block markup (covered in the developer section below)

For theme developers: bundling overlays with your theme

Themes can ship pre-built navigation overlays so they are available as soon as the theme is activated. The recommended approach is to provide both a default overlay template part and a set of overlay patterns.

Template parts vs patterns

Understanding the distinction helps decide how to structure an overlay offering:

  • template part is the overlay itself — the component that gets rendered when a Navigation block uses an overlay. Shipping a template part means a ready-to-use overlay is available from the moment the theme is activated.
  • Patterns are design options that appear in the Design tab when editing a navigation overlay in the Site Editor. Selecting a pattern replaces the current overlay content with the pattern’s block markup, letting users switch between distinct designs.

A patterns-only approach is also valid — useful when a theme wants to offer design options without pre-applying an overlay automatically. In this case, users create a new overlay via the Navigation block’s controls and pick from the theme’s patterns as a starting point.

Updating your Theme

1. Register the template part in theme.json

Registering the template part in theme.json is required. Without it, the template part is assigned the uncategorized area and will not be recognised by the Navigation block as an overlay.

Add an entry to the templateParts array, setting area to navigation-overlay:

{
    "templateParts": [
        {
            "area": "navigation-overlay",
            "name": "my-custom-overlay",
            "title": "My Custom Overlay"
        }
    ]
}

2. Create the template part file

Create the corresponding HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. file in the theme’s parts/ directory. The filename should match the name value from theme.json.

It is strongly recommended to include the Navigation Overlay Close block within the overlay. If it is omitted, WordPress will automatically insert a fallback close button on the frontend for 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) and usability reasons — but that button may not match the overlay’s design or be positioned as expected. Including it explicitly gives full control over its appearance and placement.

<!-- parts/my-custom-overlay.html -->
<!-- wp:group {"layout":{"type":"flex","orientation":"vertical"}} -->
<div class="wp-block-group">
    <!-- wp:navigation-overlay-close /-->
    <!-- wp:navigation {"layout":{"type":"flex","orientation":"vertical"}} /-->
</div>
<!-- /wp:group -->

3. Register overlay patterns

Overlay patterns are registered using register_block_pattern(). Setting blockTypes to core/template-part/navigation-overlay scopes the pattern so it only appears when editing a navigation overlay template part — not in the general inserter.

register_block_pattern(
    'my-theme/navigation-overlay-default',
    array(
        'title'      => __( 'Default Overlay', 'my-theme' ),
        'categories' => array( 'navigation' ),
        'blockTypes' => array( 'core/template-part/navigation-overlay' ),
        'content'    => '<!-- wp:group {"layout":{"type":"flex","orientation":"vertical"}} -->
<div class="wp-block-group">
    <!-- wp:navigation-overlay-close /-->
    <!-- wp:navigation {"layout":{"type":"flex","orientation":"vertical"}} /-->
</div>
<!-- /wp:group -->',
    )
);

4. Pre-configuring the Navigation block (optional)

A theme can optionally pre-configure a Navigation block to reference a specific overlay by setting the overlay attribute in the block markup. The value should be the template part slug only — without a theme prefix:

<!-- wp:navigation {"overlay":"my-custom-overlay"} /-->

Using the slug only — without a theme prefix — is important for future compatibility: WordPress plans to allow template parts to persist across theme switches, and a theme-prefixed identifier would break that. This follows the same convention as header and footer template parts.

The overlay attribute is entirely optional — users can select or change the overlay at any time using the Navigation block’s sidebar controls.

Known limitations

Template parts and theme switching

Navigation overlay template parts are currently tied to the active theme. Custom overlays will not be preserved if the active theme is switched. This is a known limitation tracked in gutenberg#72452.

Overlays are full-screen only

In this initial release, navigation overlays are always rendered full-screen. Non-full-screen overlay styles (such as a sidebar drawer) are not yet supported. This requires implementing overlays as a true <dialog> element — including support for clicking outside to close — which is planned for a future release.

Not a generic popup or dialog

Navigation Overlays are intentionally scoped to the Navigation block and are not designed as a general-purpose popup or dialog implementation. For broader use cases — such as modal dialogs triggered by arbitrary content — a dedicated Dialog block is in development and tracked in gutenberg#61297.

Questions and feedback

Until now, the mobile navigation overlay has been one of the few remaining areas of a block theme that couldn’t be designed in the Site Editor. Navigation Overlays change that. An overlay can contain anything blocks can express — a simple menu with a styled close button, a full-screen layout with the site logo and a call to action, or a content-rich experience that turns the mobile menu into a destination in its own right.

There is a lot of creative space here, and seeing what the community builds with it will be exciting.

Questions are welcome in the comments below.

Further reading


Props @onemaggie for implementation contributions and technical review, @mikachan, @jeryj @scruffian for proofreading, and @mmcalister, whose Ollie Menu Designer 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 helped validate community demand for this functionality.

#7-0, #dev-notes, #navigation

Changes to the Interactivity API in WordPress 7.0

New watch() function

WordPress 7.0 introduces a watch() function in the @wordpress/interactivity package. It subscribes to changes in any reactive value accessed inside a callback, re-running the callback whenever those values change.

Currently, 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. provides data-wp-watch as a directive tied to a DOM element’s lifecycle for reacting to state changes. However, there is no programmatic API to observe those changes independently of the DOM, for example, to run side effects at the store level, set up logging, or synchronize state between stores. The watch() function fills this gap.

import { store, watch } from '@wordpress/interactivity';

const { state } = store( 'myPlugin', {
    state: {
        counter: 0,
    },
} );

// Runs immediately and re-runs whenever `state.counter` changes.
watch( () => {
    console.log( 'Counter is ' + state.counter );
} );

The function returns an unwatch callback that stops the watcher:

const unwatch = watch( () => {
    console.log( 'Counter is ' + state.counter );
} );

// Later, to stop watching:
unwatch();

The callback can also return a cleanup function. This cleanup runs before each re-execution and when the watcher is disposed of via unwatch():

const unwatch = watch( () => {
    const handler = () => { /* ... */ };
    document.addEventListener( 'click', handler );

    return () => {
        document.removeEventListener( 'click', handler );
    };
} );

See #75563 for more details.

Props to @luisherranz for the implementation.

Deprecated state.navigation properties in core/router

The state.navigation.hasStarted and state.navigation.hasFinished properties in the core/router store were internal implementation details used for the loading bar animation. These were never intended to be part of the public API.

Starting in WordPress 7.0, accessing state.navigation from the core/router store is deprecated and will trigger a console warning in development mode (SCRIPT_DEBUG). Direct access will stop working in a future version of WordPress. An official mechanism for tracking navigation state will be introduced in WordPress 7.1.

See #70882 for more details.

Props to @yashjawale for the implementation.

state.url from core/router is now populated on the server

Previously, state.url in the core/router store was initialized on the client by setting it to window.location.href. This meant the value was undefined until the @wordpress/interactivity-router module finished loading asynchronously, requiring developers to guard against that initial undefined state and 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. out the subsequent initialization to avoid reacting to it as an actual navigation.

Starting in WordPress 7.0, this value is populated on the server during directive processing, meaning its value doesn’t change until the first client-side navigation occurs.

This makes it possible to combine watch() and state.url to reliably track client-side navigations, for example, to send analytics on each virtual page view:

import { store, watch } from '@wordpress/interactivity';

const { state } = store( 'core/router' );

watch( () => {
    // This runs on every client-side navigation.
    sendAnalyticsPageView( state.url );
} );

See #10944 for more details.

Props to @luisherranz for the implementation.

#7-0, #dev-notes, #dev-notes-7-0, #interactivity-api

DataViews, DataForm, et al. in WordPress 7.0

Previous cycle: WordPress 6.9.

This is a summary of the changes introduced in the “dataviews space” during the WordPress 7.0 cycle from the 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. perspective. They have been posted in the corresponding iteration issue as well. To follow what’s next, subscribe to the iteration issue for WordPress 7.1.

The changes listed here include 166 contributions by 35 unique authors across the community during the past 4.5 months (since October 17th, 2025).

Continue reading

#7-0, #dev-notes, #dev-notes-7-0

Dev Chat Agenda – March 4, 2026

The next WordPress Developers Chat will take place on Wednesday, March 4, 2026, 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 7.0 Updates

  • 7.0 Beta 2 was released on February 26th.
  • 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. 3 is scheduled for March 5th at 14:00 UTC in the #core SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel.
  • 7.0 bug scrubs continue twice a week in the #core Slack channel.
  • New 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.:

General

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.

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.

Props to @audrasjb for collaboration and review.

#7-0, #agenda, #dev-chat

PHP-only block registration

Developers can now create simple blocks using only PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher. This is meant for blocks that only need server-side rendering and aren’t meant to be highly interactive. It isn’t meant to replace the existing client-side paradigm, nor is it meant to ever be as featureful! However, this 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. could help developers avoid extra complexity and could thus foster 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. adoption, especially in classic themes or server-driven workflows.

To use it, call register_block_type with the new autoRegister flag. Note that a render_callback function must also be provided:

function gutenberg_register_php_only_blocks() {
    register_block_type(
        'my-plugin/example',
        array(
            'title'           => 'My Example Block',
            'attributes'      => array(
                'title'   => array(
                    'type'    => 'string',
                    'default' => 'Hello World',
                ),
                'count'   => array(
                    'type'    => 'integer',
                    'default' => 5,
                ),
                'enabled' => array(
                    'type'    => 'boolean',
                    'default' => true,
                ),
                'size'    => array(
                    'type'    => 'string',
                    'enum'    => array( 'small', 'medium', 'large' ),
                    'default' => 'medium',
                ),
            ),
            'render_callback' => function ( $attributes ) {
                return sprintf(
                    '<div>%s: %d items (%s)</div>',
                    esc_html( $attributes['title'] ),
                    $attributes['count'],
                    $attributes['size']
                );
            },
            'supports'        => array(
                'autoRegister' => true,
            ),
        )
    );
}

add_action( 'init', 'gutenberg_register_php_only_blocks' );

These blocks will automatically appear in the editor without requiring any JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/. registration, and, wherever possible, the editor will automatically generate controls in the Inspector Controls 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. to allow users to edit block attributes:

Note that controls will not be generated for attributes with the local role or for attributes whose types are not supported.

See #64639 for more details.

Props to @priethor for the implementation.
Props to @wildworks for reviewing 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..

#dev-notes, #dev-notes-7-0

What’s new in Gutenberg 22.6? (25 February)

“What’s new in 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/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.

What’s New In
Gutenberg 22.6?

Gutenberg 22.6 has been released and is available for download!

This release brings visual change tracking to in-editor revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. and introduces a brand-new Icon 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.. The navigation overlay and client-side media processing both graduate from experimental status. Real-time collaboration adds cursor awareness and can now be enabled through a global settings toggle, and the Gallery block now supports lightbox navigation between images.

A total of 388 PRs were merged in Gutenberg 22.6, with 8 first-time contributors!

Table of contents

In-Editor Revisions: Visual Change Tracking

Browsing post revisions in the editor now shows a color-coded visual diff between the selected revision and its predecessor. Added text appears in green with an underline, removed text in red with a strikethrough, and formatting or attribute changes are highlighted with a yellow outline. Entire blocks, added or removed, are outlined in green or red, respectively. Visual change tracking can be toggled off to view clean content. Colors blend with currentColor so they look appropriate across all themes. (75049)

Icon Block

A brand-new Icon block lets you insert SVG icons from a curated library directly into your content. The block is powered by a new server-side SVG Icon Registration 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., so updates to the icon registry propagate to all uses without block validation errors. A REST endpoint at /wp/v2/icons supports searching and filtering. The initial set draws from the wordpress/icons package, and the architecture is designed for future extensibility including third-party icon registration. (71227, 72215, 75576)

Navigation blocks now have customizable overlays and give user full control over mobile hamburger menus. A prominent “Create overlay” button guides you through the setup, providing a selection of patterns to achieve a variety of designs for your overlay. The Navigation Overlay feature is no longer experimental, and is available to all users of the 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. (74968, 74971, 75564, 75276)

Client-Side Media Processing

Client-side media processing is a feature that leverages the browser’s 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). to process images. This enables the use of more advanced image formats (including AVIF, WebP, and MozJPEG output encoding) and compression techniques (resulting in ~10–15% smaller file sizes with no quality loss for generated JPEG sub-sizes). It also reduces demand on the web server, thus providing smoother media workflows. As of Gutenberg 22.6, client-side media processing has graduated from experimental state to stable feature. (75081, 74910)

Real-Time Collaboration

Real-time collaboration sees a major round of development in this release. A new toggle under Settings > Writing lets you enable the feature, and once active, collaborators editing the same post see each other’s cursor positions and block selections in real time. A presence indicator in the editor 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. shows who’s currently editing. Under the hood, title, content, and excerptExcerpt An excerpt is the description of the blog post or page that will by default show on the blog archive page, in search results (SERPs), and on social media. With an SEO plugin, the excerpt may also be in that plugin’s metabox. now sync via Y.text for more granular conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. resolution, and numerous reliability fixes address disconnection handling, revision restores, and performance metrics. (75286, 75398, 75065, 75448, 75595)

The Gallery block’s “Enlarge on click” lightbox now supports navigation between images. When you click an image in a gallery, back and next buttons let you browse through the rest of the gallery without closing the lightbox. Keyboard navigation with arrow keys and screen reader announcements (“Enlarged image X of Y”) are fully supported. Images that don’t have lightbox enabled (e.g., those linked to a file URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org) are skipped during navigation. (62906)

Other Notable Highlights

  • Block visibility enhancements: List View now shows viewport-aware icons with tooltips indicating which viewports a block is hidden on, and hidden blocks get a simplified toolbar. The keyboard shortcut (Cmd+Shift+H / Ctrl+Shift+H) to toggle block visibility options is featured in the block context menu. (75404, 75335, 75334)
  • Notes keyboard shortcut: You can now create a block note with Cmd+Option+M (Mac) or Ctrl+Alt+M (Windows/Linux), and press Escape to cancel. (75287, 75288)
  • Verse block renamed to Poetry: The Verse block is now called Poetry. (74121)
  • QuickEdit stabilized: QuickEdit is now stable and opens as a modal in the Site Editor pages view. (75565, 75173)
  • Text-align block support migrations: Eight blocks (Author Biography, Post Author Name, Post Comments Count, Post Comments Form, Post Comments Link, Post Terms, Post Time to Read, and Term Description) have been migrated to the standardized text-align block support.
  • Enforced 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. for the post editor: Please check here for more information. (75475)

Many of these new features will also be included in the upcoming WordPress version 7.0, so you can find more details and testing instructions over at the 7.0 Call for Testing.

Changelog

Features

  • wp-env: Add –config option for custom configuration files. (75087)

Client Side Media

  • Add AVIF, WebP and MozJPEG output encoding support. (75081)
  • Add device/browser 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). detection. (75863)
  • Add EXIF metadata tests for Client Side Media. (74909)
  • Fix client-side media file naming. (75817)
  • Media: Graduate client-side media processing from experimental. (75112)
  • Pass unsupported formats directly to the server. (74910)

Block Library

  • New Block: Icon Block. (71227)
  • Remove the Icon Block and Icon SVG API from experiments. (75576)

Interactivity API

  • Export watch from @preact/signals‘s effect. (75563)

Enhancements

  • wordpress/ui: Add Dialog component. (75183)
  • wordpress/ui: Use semantic dimension tokens. (74557)
  • Abilities: Allow nested namespace ability names (2-4 segments). (75393)
  • Add testsEnvironment option and split Gutenberg wp-env configs. (75341)
  • Adminadmin (and super admin) UIUI User interface: Apply ‘text-wrap: Pretty’ to Page. (74907)
  • Commands: Display categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. labels and enforce category icons. (75669)
  • Gutenberg plugin: Always enforce the iframe in the post editor. (75475)
  • Layout: Update Gutenberg to match coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. after #75360 sync. (75594)
  • Media Utils: Auto-select uploaded files in media modal experiment. (75597)
  • MediaEdit: Support ordered values and reordering of items. (75207)
  • Replace install-path command with status command in wp-env. (75020)
  • Theme: Update dimension tokens. (75054)
  • Theme: Update elevation tokens to use abbreviated size names. (75103)
  • UI: Add Textarea primitive. (74707)
  • @wordpress/ui: Add IconButton. (74697)
  • @wordpress/ui: Add Tabs. (74652)
  • iAPI router: Move internal properties to a private store. (70882)
  • ui/IconButton: Make icon always 24px regardless of size prop. (75677)
  • ui/Button: Add min width. (75133)
  • wp-env: Add cleanup command and force flag. (75045)

Block Library

  • Accordion block: Add list view support. (75271)
  • Accordion: Move Accordion icons to Icon library. (75380)
  • Author block: When recreating, migrate the textAlign attribute of the Author block to the block style attribute. (75153)
  • Block Supports: Add Line Indent support using enum setting. (74889)
  • Blocks: Try prepending ‘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.’ to URLs without protocol. (75005)
  • Breadcrumbs: Improve loading state rendering. (75383)
  • Custom CSSCSS Cascading Style Sheets. support: Add attributes for dynamic blocks. (75052)
  • Default all initial suggested results to 20 for navigation link ui. (75186)
  • Gallery: Add lightbox support. (62906)
  • Gallery: Add list view block support. (75407)
  • Icon block: Skip serialization and increase default size. (75553)
  • Image Block: Handle image URLs without protocol. (75135)
  • Informational Parity between Inspector Link Preview and on Canvas Link Preview. (75399)
  • List View Support: Only render list view on top level block with support. (75166)
  • Migrate multiple blocks to text-align block support:
    • Author Biography. (74997)
    • Post Author Name. (75109)
    • Post Comments Count. (75321)
    • Post Comments Form. (75322)
    • Post Comments Link. (75332)
    • Post Terms. (75545)
    • Post Time to Read. (75541)
    • Term Description. (75542)
  • Navigation Link: Clarify Link To 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. and draft states. (74054)
  • Navigation Link: Go to page link and edit page for inspector 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.. (75262)
  • Navigation Overlay: Add Create Overlay button. (74971)
  • Navigation Overlay: Remove experiment. (74968)
  • Navigation: Improved help on create page flow. (75349)
  • Navigation: Update overlay template part naming to ‘Navigation Overlay’. (75564)
  • Pattern Editing and Navigation block: Show navigation controls in popover. (75194)
  • Pattern Editing: Allow click through to List View. (75246)
  • Pattern Editing: Revise ‘Edit section’ button naming. (75663)
  • Playlist block: Remove border. (75202)
  • Post Excerpt: Add text columns support. (75587)
  • Pre-populate Navigation Page Creator with Search Text. (75154)
  • Rename Verse block to Poetry. (74121)
  • Tabs:
    • Add text and background color support. (75482)
    • Inherit text color for tabs-menu-item blocks. (75621)
    • Polish. (75128)
    • Simplify Tabs Menu Item editing. (75416)
    • Tidy up UI for controls. (75309)
    • Update Tabs block icons. (75376)
  • theme.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.: Enable width setting for Icon block by default. (75665)

Post Editor

  • Add dedicated navigation-overlay icon (#75249). (75426)
  • Auto-switch viewport based on Overlay Visibility setting when entering overlay editor. (75386)
  • Block Editor: Allow disabling content-only editing for unsynced patterns. (75457)
  • Commands: Add category property to command registration. (75612)
  • Create sub-sized images. (74566)
  • Editor: Introduce new selectedNote editor state. (75177)
  • 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. navigation category patterns to only show in navigation-overlay template part context. (75276)
  • In-editor Revisions: Update success notice message. (75411)
  • In-editor revisions: Add visual diffing. (75049)
  • Migrate EditorSnackbar and EditorNotices components to the @wordpress/notices package. (74384)
  • Navigation: Select list view tab on contentOnly. Alternative with explicit solution. (75578)
  • Notes: Add a keyboard shortcut for creating a new note. (75287)
  • Notes: Pressing Escape should cancel adding a note. (75288)
  • Notes: Update shortcut category. (75461)
  • Post Content Block: Improve removal confirmation modal. (75001)
  • Real-time collaboration:
    • Add collaborators cursor awareness. (75398)
    • Add global setting to enable real-time collaboration. (75286)
    • Move PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher code to compat / backports directory. (75366)
    • Remove block client IDs from Awareness, fix “Show Template” view. (75590)
  • Set snackbar position to center. (75294)
  • Site Editor Pages: QuickEdit as a modal. (75173)
  • Use contextual snackbar text when activating a theme from preview. (75385)

Block Editor

  • Add URL validation in LinkControl using ValidatedInputControl. (73486)
  • Add block rename keyboard shortcut. (74454)
  • Add getDimensionsClassesAndStyles function and related tests. (74524)
  • Add storybook for ColorPaletteControl. (74425)
  • Block Lock: Disable Apply button on non-dirty state. (75495)
  • Block Support: Allow serialization skipping for ariaLabel. (75192)
  • Block Visibility:
    • Centralize modal state in block-editor store. (75367)
    • Disable Apply button on non-dirty state. (75494)
    • Disable visibility toggle for children of sections. (75447)
    • Show keyboard shortcut in context menu. (75334)
    • Show viewport icons and tooltip in list view for hidden blocks. (75404)
    • Simplify toolbar for hidden blocks. (75335)
  • Cover: Add new “fullheight” icon, and use for Cover. (75240)
  • Enable paragraphs to be added to contentOnly patterns. (73222)
  • Enhance block appender labels to reflect default block type. (71502)
  • Hide parent grid cells when child grid is selected. (75078)
  • Implement WebAssembly support detection and fallbacks. (74827)
  • Improve Background panel UI in Global Styles. (75230)
  • Pattern Editing: Add “Edit section” button to unsynced pattern toolbar. (75602)
  • Pattern Editing: Hide List View child blocks in Content panel. (75007)
  • Stabilize PHP-Only Block Registration. (75543)

Site Editor

  • DataForm: Update panel trigger. (75290)
  • DataViews: Add onReset prop for view persistence reset. (75093)
  • Make QuickEdit stable + change template to select. (75565)
  • Prevent welcome guide from appearing during loading. (75102)
  • Quick edit: Make footer sticky. (75297)
  • Unified view persistence: Share one persisted view across all tabs. (74970)

DataViews

  • Add new adaptiveSelect DataForm control. (74937)
  • Consistent rendering of selection checkbox and actions in grid layout. (75056)
  • DataForm: Add edit variant. (75462)
  • DataForm: Mark fields as required or optional automatically. (74430)
  • Dataform: Adds validation support to the DataForm details layout. (74996)

Components

  • DataViews: Use public ColorPicker instead of internal Picker export. (75394)
  • DateCalendar, DateRangeCalendar: Use lighter gray for disabled dates. (75683)
  • ToggleGroupControl: Add visual emphasis to selected item. (75138)
  • [Real-time collaboration] Refine collaborator overlay with AvatarAvatar An avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. component integration. (75595)

Icons

  • Icons Registry: Don’t expose “internal” icons. (75526)
  • Trim list of public icons further. (75630)
  • Update icon manifest acronyms. (75418)

Media

  • Media Fields: Filter author field to only show authors. (75328)
  • Media Fields: Fix filename field truncation. (75091)
  • Media Modal Experiment: Update preview size to be a little smaller. (75191)

New APIs

  • Real-time collaboration: Remove wordpress/sync from bundled packages and add private APIs. (74671)

Bug Fixes

  • Boot: Fix mobile admin bar covering single-page headers. (75339)
  • DataForm: Fix color picker styles. (75427)
  • Env: Remove non-functional WP_ENV_MULTISITE configuration. (72567)
  • Fields: Fix authorField query. (75298)
  • Fix missed dimension token 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 UI package. (75446)
  • Fix undo end-to-end test. (75740)
  • Language Format: Add missing attribute definition. (75422)
  • Media Modal Experiment: Remove default value for allowedTypes so that the file block can accept all types. (75159)
  • Prevent fatal error when the inline CSS duotone variable is an array. (75283)
  • Routing Boot Package: Remove left border from stage and inspector surfaces. (75036)
  • Run generate-worker-placeholders script in dev. (75104)
  • Support zip theme sources in Playground runtime. (75155)
  • Upload Media: Fix upload handling. (75646)
  • 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. Area: Disable renaming and visibility support. (75279)
  • Writing flow: Fix Cmd+A from empty RichText. (75175)
  • iAPI Router: Update cached styles for re-fetched pages. (75097)
  • ui/Button: Fix disabled styles and variable composition. (75568)
  • wp-env Playground: Improve mapping and core source handling. (75527)
  • wp-env:
    • Fix MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com/. startup race condition causing database connection errors. (75046)
    • Fix mixed runtime detection issues. (75057)
    • Fix status command. (75325)

Block Library

  • Add initialSearchState to avoid console warnings from LinkControl inputValue change. (75643)
  • Border Support: Fix editor split border style fallback. (75546)
  • Comments Link: Fix transforms textAlign. (75676)
  • Cover block: Force LTR direction for the background URL input field. (75169)
  • Featured ImageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts.: Added a fallback to the default value when clearing the aspect ratio control for the Featured Image. (75358)
  • Fix duplicate content when navigation overlay is open and nav has non-link inner blocks. (75180)
  • Fix: Make all Navigation Overlay Close buttons work. (75384)
  • Fix: Show and hook up submenu visibility for Page Lists within Navigation Blocks. (75531)
  • Gallery: Fix PHP warning in random order image reordering. (75678)
  • Gallery: Skip interactivity directives when no images have lightbox enabled. (75680)
  • Group Block: Fix preview display. (75200)
  • Heading Block: Fix preview display. (75675)
  • Hide grid visualiser if the grid block is hidden. (74963)
  • Hide navigation-overlay template parts from inserter. (75478)
  • Icon Block:
    • Corrects style selectors when global styles are set. (75724)
    • Include Icons assets in Plugin ZIP. (75866)
    • Move default width rule to theme.json instead of block.json. (75653)
    • Remove experimental property. (75742)
  • Image block: Add missing space between sentences. (75142)
  • Improve link preview badges. (75318)
  • Media & Text: Respect image_default_link_type option. (74295)
  • Navigation Submenu: Restore openSubmenusOnClick to usesContext for backward compatibility. (75435)
  • Navigation block: Remove horizontal scroll from list view. (75086)
  • Navigation link: Fix resetting link from the tools panel. (75228)
  • Navigation overlay: Fix default pattern contrast issue on dark themes. (74979)
  • Post Excerpt: Disable HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. element insertion. (74928)
  • Pullquote: Fix deprecated block validation when anchor/id attribute is present. (75132)
  • Query: Remove content role from block. (75760)
  • Remove useEffect guard rail to enforce minimum width. (75624)
  • Respect deprecated openSubmenusOnClick value on frontend rendering. (75439)
  • Tab Block: Ensure label formatting works correctly. (75548)
  • Tab: Fixed the color reset to ensure correctness. (75606)
  • Tabs:
    • Fix incorrect fixtures. (75523)
    • Fix saved HTML. (75580)
    • Improve Tab Panel 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). (75484)
    • Improve tab keyboard nav. (75471)
    • Make Example preview translatable. (75555)
    • Remove name editing UI. (75554)
    • Sanitize tab_id. (75615)

Block Editor

  • Allow grid to use style variation blockGap values for columns calculation. (75360)
  • Allow stable block IDs in block editor store. (74687)
  • Block Bindings: Have block fields panel reflects bound attribute value. (72096)
  • Block editor cross origin isolation: Attempt to gracefully deal with race conditions. (75600)
  • Block transform command: Pass the block icon src rather than a BlockIcon component. (75365)
  • ContrastChecker: Fix check for button block colors. (71959)
  • DOM: Make focus.focusable spec-compliant by excluding inert elements. (75172)
  • Fix Columns block horizontal spacing when setting vertical gap. (75355)
  • Fix LinkControl URL Normalization. (75488)
  • Fix emdashes in HTML anchor description. (75043)
  • Fix error when undoing newly added pattern. (75850)
  • Fix: Changing URL in link after changing text outside the popover resets it. (75342)
  • Link Control: Validate on submit. (75267, 75310)
  • List View tab: Ensure it’s populated when first selecting a container block. (75558)
  • Only show dot divider for parent selector in top toolbar. (75710)
  • Pattern editing: Fix block editing modes when switching back and forth from isolated editing. (75821)
  • Pattern Editing: Fix nested patterns/sections. (75772)
  • Post editor: iframe: Check inserted rather than registered block versions. (75187)
  • Preserve existing URLInput defaults by only using validation component when validity settings are used. (75392)
  • Remove formatting controls restriction private API. (75382)
  • RichText:
    • Remove min-width inline style causing flex layout issues. (75370)
    • Avoid stale active formats when deleting the text. (75227)
    • Fix white space collapsing around formatting. (74820)
  • Synced patterns: Fix block editing mode of synced pattern content when nested in an unsynced pattern. (75818)
  • Writing Flow:
    • Fix block selection from partially selected RichText. (75449)
    • Fix select all with full formatting. (64934)
    • Skip non-empty blocks on arrow key nav. (75141)

Post Editor

  • Add paste logging to writing flow. (73885)
  • Fix Overlay core patterns not showing on design tab. (75618)
  • Fix selection restoration after entity navigation. (75371)
  • In-editor revisions: Preserve client IDs. (75028)
  • Lock save button during Client Side Media processing and uploading. (74951)
  • Notes:
    • Remove block highlight when deleting parent note. (75453)
    • Fix block toolbar click action. (75614)
    • Fix new note creation from the List View. (75566)
    • Fix sidebar display logic for small screens. (75454)
  • Real-time Collaboration: Fix revision restore 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.. (75233)
  • Restore deprecated Pullquote Block. (75122)
  • [Real-time collaboration] Fix layout issue. (75599)

Components

  • Button: Prevent outline flicker when focused and active at the same time. (75346)
  • ExternalLink: Prevent Twemoji from replacing arrow. (75538)
  • Fix: ISO 8601 compliant year formatting in TimePicker. (75343)
  • Remove “text-wrap: Balance” fallback from Text. (75089)
  • Slot: Fix ref forwarding. (75274)
  • Snackbar: Fix scaling issue with snackbars that update their content via a common id. (75709)
  • Tabs: Set explicit font-family on tab buttons. (75537)
  • ToggleControl: Pass full props to the input element. (74956)
  • ToggleControl: Prevent console warning for __nextHasNoMarginBottom. (75296)

Collaboration

  • Add cap check for single taxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. term entities. (75708)
  • Add minimum cap check to sync endpoint. (75681)
  • Always target autosave revision. (75105)
  • Bugfix for CRDT user selection and add tests. (75075)
  • Bugfix: Set the removed users to empty for awareness. (75337)
  • Fix comment syncing on site editor. (75746)
  • Fix entity save call / initial persistence. (75841)
  • Pick user fields instead of spreading the entire object. (75528)
  • Remove disconnected users from Awareness. (75253)
  • Remove IS_GUTENBERG_PLUGIN checks for collaborative editing. (75699)
  • Update diff package. (75644)

DataViews

  • Add title attribute in grid item title field. (75085)
  • DataForm Regular layout: Label always uppercase. (75292)
  • DataViews Filters: Fix styling of long values in filter dropdown. (75369)
  • Fix fields async validation. (74948)
  • Fix title truncation in list layout. (75063)

Icons

  • Fix incorrect attributes for SVG. (75273)
  • Make full height icon label title case. (75524)

Site Editor

  • Prevent QuickEdit modal from being triggered in list layout via URL param. (75300)
  • Refactor activeFilters to activeViewOverrides with date sort for User tab. (75094)

npm Packages

  • Update wordpress/vips in root package.json to use a relative path. (75758)
  • Vips and worker-threads packages: Remove private flag so that packages can be published to npm. (75752)

Accessibility

  • RangeControl: Support forced-colors mode. (75165)
  • Resize metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. box pane without ResizableBox. (66735)

Performance

  • Improve sync performance metrics. (75029)
  • Notes: Don’t trigger reflow for pinned sidebar. (75010)

Block Editor

  • Editor iframe: Memoize src blob URL to prevent unwanted revokes. (75619)
  • Optimize controlled inner blocks state churn. (75458)
  • useBlockSync: Stop reconstructing controlled inner blocks. (75562)

Block Library

  • Media & Text: Fix RTLCSS control directives appearing in production CSS. (73205)
  • Post Terms: Avoid unbound queries when the post context isn’t available. (75536)
  • Core Data: Create icons entity. (75773)

Experiments

  • Add useBlocker to private APIs for enhanced routing control. (75687)
  • Playlist block. (50664)
  • Real-time Collaboration: Fix broken unit tests for awareness. (75362)
  • SVG Icon registration API. (72215)

Collaboration

  • Add collaborators presence UI. (75065)
  • Add hook for accessing awareness data. (75009)
  • Add sync connection status handling. (75066)
  • Add tests for the awareness code in core-data. (75074)
  • Add tests for the awareness code in sync. (75077)
  • Compact on request with encodeStateAsUpdate. (75682)
  • Fix auto draft bug for Y.text titles. (75560)
  • Import Yjs correctly in core-data. (75500)
  • Sync post content and undefined blocks value. (75437)
  • Update the y-protocols version and remove the unnecessary diff types. (75657)
  • Use Y.text for title, content and excerpt. (75448)

Documentation

  • Clarifies cherry-picking permissions and improves minor releaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality. workflow documentation. (75034)
  • wordpress/theme: Add missing CHANGELOG entries. (75281)
  • Components: Add usage guidance for agents and Storybook. (74815)
  • Core Block Reference: Fix object empty inner key processing. (75391)
  • Design System: Add guidelines for save and submit UXUX User experience. (74811)
  • Docs: Add missing global documentation in block library. (75004)
  • Docs: Remove private GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ team links in repository management. (75255)
  • Docs: Rename Interactivity API’s ‘API Reference’ to ‘Directives and Store’. (74974)
  • Docs: Simplifying Gutenberg versions table. (75209)
  • Fix awareness timeout documentation unit. (75284)
  • Fix: Navigation Overlay Close Block: Add missing since 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.) #75247. (75250)
  • Real-time collaboration: Update ‘sync.providers’ filter inline comments. (75248)
  • Removed Unused Global Documentation. (75631)
  • Scripts: Fix contributor guide link in README. (75161)
  • Storybook: Add Stories for LetterSpacingControl component. (73480)
  • Storybook: Fix missing props on certain components. (75316)
  • Storybook: Preserve export order for stories. (75295)
  • Tabs: Add @since 7.0.0 annotations. (75521)
  • Theme: Fix gap token migration guide in changelog. (75492)
  • Theme: Render default density selector last in design tokens CSS. (75474)
  • Updated Typo in template-activate file. (75333)

Code Quality

  • Cleanup: Remove unnecessary array check in WP_Theme_JSON_Gutenberg. (75515)
  • Code Modernization: Replace isset() checks with null coalescing operator. (75425, 75419, 75487)
  • Core Data: Improve blocks cache in useEntityBlockEditor. (75400)
  • Docs: Add missing global documentation in rtl.php and meta-box.php. (75082)
  • Generate manifest PHP file based on JSON file. (75684)
  • Move experimental PR out of backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. log. (75465)
  • Navigation overlay: Added basic end-to-end tests. (75581)
  • Private APIs: Remove duplicate @wordpress/ui entry. (75051)
  • Remove backport changelog committed by mistake. (75441)
  • Remove the ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. Native test status badges. (74674)
  • Restrict base-ui imports outside of UI component packages. (75143)
  • Select: Remove unnecessary jest.setTimeout from test. (75444)
  • Types: Consistently use the React namespace. (75499)

Block Library

  • Deprecate ‘Post author’ block. (55352)
  • Navigation: Consolidate SVG rendering functions to a shared helper. (74853)
  • Optimize tabsList computation with useRef for comparison. (75219)
  • Playlist block: Inherit more CSS. (75256)
  • Remove temp nav files. (75061)
  • Remove unnecessary block deprecation from experimental tabs. (75208)
  • Storybook: Always load design tokens in Design System section. (74899)

Block Editor

  • Add l10nL10n Localization, or the act of translating code into one's own language. Also see internationalization. Often written with an uppercase L so it is not confused with the capital letter i or the numeral 1. WordPress has a capable and dynamic group of polyglots who take WordPress to more than 70 different locales. context to ‘Manage allowed blocks’ string. (75239)
  • PHP-Only Block Registration: Remove client-side schema validation. (75623)
  • Pattern Editing: Add comments for expandRevision functionality. (75573)
  • Pattern Editing: Move List View selectors to private-selectors. (75414)
  • The insertBlock(s) actions should receive the same arguments. (75197)
  • useBlockVisibility: Consolidate and remove unnecessary useMemo calls. (75120, 75125)

Components

  • Prefix usages of JSX namespaces with React.JSX. (75508)
  • Story types: Fix StoryFns used as React components. (75472)
  • UI: Remove Box component abstraction. (74986)
  • Update Ariakit packages. (75620)
  • Update dependencies and types for React 19 compatibility. (75324, 75340, 75567)
  • useRef: Always supply initial value. (75513)

Post Editor

  • Notes: Use preferences store when applicable. (75008)
  • Real-time Collaboration: Change users to collaborators. (75237)
  • Real-time collaboration: Fix type imports. (75232)
  • Real-time collaboration: Make the collaborators presence button translatable. (75252)
  • Remove deprecated __nextHasNoMarginBottom prop. (75139)
  • RichText: Move useFormatTypes to rich-text package. (75387)
  • useMergeRefs: Migrate to TypeScript. (75569)

DataViews

  • DataForm: Style SummaryButton in panel layout with is-disabled classname. (75470)
  • Externalize theme stylesheet. (75182)

Collaboration

  • Move AwarenessState to wordpress/core-data. (75216)
  • Real-time collaboration: Update and unpin sync package dependencies. (75059)

Tools

  • AGENTS.md: Add CLAUDE.md symlinks, architecture decisions, and common pitfalls. (75507)
  • Duotone: Add sgomes as owner. (75519)
  • Real-Time Collaboration: Add end-to-end tests for RTC. (75598)

Testing

  • Add end-to-end test for loading settings in site editor preload spec. (75661)
  • Add end-to-end test for selection restoration after pattern navigation. (75575)
  • Add unit testunit test Code written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. for gap in block style variations fix. (75038)
  • Navigation: Add ‘expectedDeprecated’ annotations. (75659)
  • Update Navigation block tests to use non-deprecated API. (75660)
  • Update navigation block tests to use gutenberg version of block_core_navigation_block_tree_has_block_type. (75673)
  • Upgrade Playwright to v1.58. (75632)
  • Workflows: Ignore icons manifest for manual backports. (75245)

Build Tooling

  • Add timestamp when publishing next versions. (75293)
  • Build: Add vendorScripts configuration to build packages from node_modules. (74343)
  • Fix dev build for fresh checkouts (or with build/scripts/block-library missing). (75108)
  • GitHub actions: Exclude lib/theme.json from backport changelog check. (75666)
  • Infrastructure: Add storybook to tsconfig project references. (74887)
  • Publishing packages: Fix next timestamp. (75301)

First-time contributors

The following PRs were merged by first-time contributors:

  • @Abmarne: Fix: Navigation Overlay Close Block: Add missing since tag #75247. (75250)
  • @anandrajaram21: Storybook: Add Stories for LetterSpacingControl component. (73480)
  • @czarflix: DataForm: Mark fields as required or optional automatically. (74430)
  • @davidabowman: [Real-time collaboration] Refine collaborator overlay with Avatar component integration. (75595)
  • @gmjuhasz: Media & Text: Fix RTLCSS control directives appearing in production CSS. (73205)
  • @lsarsfield: wp-env: Fix MySQL startup race condition causing database connection errors. (75046)
  • @Marianne380: Navigation Submenu: Restore openSubmenusOnClick to usesContext for backward compatibility. (75435)
  • @Swoyamjeetcodes: Add getDimensionsClassesAndStyles function and related tests. (74524)

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @Abmarne @adamsilverstein @aduth @alecgeatches @amitraj2203 @anandrajaram21 @andrewserong @annezazu @bernhard-reiter @czarate @czarflix @DAreRodz @davidabowman @ellatrix @fabiankaegy @fcoveram @getdave @gigitux @gmjuhasz @ingeniumed @isabel_brison @jameskoster @jeryj @joen @johnbillion @jorgefilipecosta @jsnajdr @juanfra @juanmaguitar @lsarsfield @luisherranz @madhudollu @Mamaduka @manhphuc @manzoorwanijk @Marianne380 @maxschmeling @mciampini @mcsf @mikachan @mirka @Mustafabharmal @noruzzaman @ntsekouras @oandregal @onemaggie @pkevan @poena @ramonopoly @saranshsinhaa @scruffian @senadir @sethrubenstein @sgomes @shailu25 @shekharnwagh @shimotomoki @simison @SirLouen @Soean @stokesman @Swoyamjeetcodes @talldan @timse201 @tyxla @welcher @westonruter @wildworks @xavilc @yashjawale @youknowriad


Props to @joen for the visuals, and to @bph for reviewing the post.

#block-editor, #core-editor, #gutenberg, #gutenberg-new

Developer documentation restored.

For those unaware, prior to this week, the documentation at https://developer.wordpress.org/reference hadn’t been updated since WordPress 6.4 — over two years out of date! Today, thankfully, this post is announcing that the reference documentation is now updated as of WordPress 6.9.1.

WordPress has seen significant change since the documentation generation process stopped, so if you found that something was missing then it wasn’t just you. Those new interfaces, classes, methods, functions, and 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. should be there now. Further, there was a pre-existing 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. where source snippets for many symbols were offset; this has been fixed in Monday’s update.

This work was the result of collaboration between many people, most of whom have never worked with this process in the past. @dd32, @dmsnell, @johnbillion, @jonsurrell, and @tmdk all worked on various approaches to restoring the ability to parse WordPress’ source code; and @dd32 and @coffee2code made sure that the updates reached the public website; and of course, numerous people in the #docs team reported and triaged bug reports that were symptoms of this process breakdown.

There is still significant work to do, as there is no way (at the time of writing this note) to generate the documentation for the upcoming WordPress 7.0 release, but as the new issues are ironed out, you can expect the updates to come much sooner than 2028 😉

There still remain a number of known issues, particularly related to PHPStan type annotations. Work is ongoing to improve the overall build process and try to reduce the feedback loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop. between making code changes and seeing those reflected in the documentation online.

Continue reading

#developer-documentation

Dev Chat Agenda – February 25, 2026

The next WordPress Developers Chat will take place on Wednesday, February 25, 2026, 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 📢

CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Team Reps for 2026

The 2026 Core Team Reps have been announced.

WordPress 7.0 Updates

Discussions 💬

The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the Core 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.

  • AI Connectors update: Pinging @flixos90 @jason_the_adams @isotropic for this item, if they are able to attend this meeting it would be nice to share the current status of this feature.
    See ticket #64591.
  • Real Time Collaboration – These issues were opened by @smithjw1 as a follow-up to the 7.0 product review meeting:
    • [Interface] Show local user’s avatarAvatar An avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. by cursor during collaborative sessions #75838
    • Auto-disable collaboration when classical metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes are detected; provide compatibility 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. and documentation #75839
    • Optional role-based restrictions for collaborative editing sessions #75840

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.

#7-0, #agenda, #dev-chat

Performance Chat Summary: 24 February 2026

ll chat log is available beginning here on Slack.

WordPress Performance TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets

  • @westonruter shared a newly opened ticketticket Created for both bug reports and feature development on the bug tracker. #64696 and noted that if real-time collaboration ends up disabling object caching for posts on the frontend, this would be a serious concern.
  • @westonruter also shared that there are four other performance-focused tickets in the current milestone.
  • @westonruter asked @pbearne about ticket #64087 and noted that it appeared related to PR #10898, which @pbearne had opened for ticket #64620.
    • @westonruter asked whether #64087 and #64620 were duplicates (or vice versa).
    • @pbearne responded that they look like duplicates and shared that the patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. should fix both issues.
    • @westonruter replied that he asked the reporter of the other ticket to test the patch.

Performance Lab 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 (and other performance plugins)

  • @westonruter shared that a security issuesecurity issue A security issue is a type of bug that can affect the security of WordPress installations. Specifically, it is a report of a bug that you have found in the WordPress core code, and that you have determined can be used to gain some level of access to a site running WordPress that you should not have. had been responsibly disclosed for the Embed Optimizer plugin and that a fix was released the previous Friday.
  • @westonruter also mentioned that there are several updates across the Performance Lab plugins that would be good to include in a new release.
    • @westonruter suggested targeting a release for Thursday and proposed wrapping up any issues and pull requests that are nearly ready before then.

    Our next chat will be held on Tuesday, March 10, 2026 at 16:00 UTC in the #core-performance channel in Slack.

    #core-performance, #hosting, #performance, #performance-chat, #summary