The WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. development team builds WordPress! Follow this site forย general updates, status reports, and the occasional code debate. Thereโs lots of ways to contribute:
Found a bugbugA 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.?Create a ticket in the bug tracker.
WordPress 6.8 |ย Release Candidaterelease candidateOne 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).ย 1 is now available ๐ฅณ
@jeffpaulย reminds allย CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.ย Committers to read this article and follow the outlined process for the upcoming steps:ย WordPress 6.8 Release Candidate Phase
We are in the process of finalizing the development notes, after which theย Field GuideField guideThe 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.ย will be released, followed by an email toย PluginPluginA 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.ย Authors containing the necessary information.
GutenbergGutenbergThe 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/ย 20.5 is now available
The new version of the Gutenberg plugin is now available in ourย plugin directory.
Help Test 6.8ย BetaBetaA 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.ย version ๐งช
The Test-Team has written two helpful guides for people interested in testing:
Theย Release Candidateย 2ย release of WordPress 6.8 will be available onย Tuesday, April 1, 2025.
A detailed overview of the release schedule for WordPress 6.8 can be foundย here. The article also includes information about the individuals assigned to each release party.
Nextย Gutenberg version: 20.6
Gutenberg 20.6 is scheduled for release onย Wednesday,ย April 2, 2025.
Nextย major releasemajor releaseA release, identified by the first two numbers (3.6), which is the focus of a full release cycle and feature development. WordPress uses decimaling count for major release versions, so 2.8, 2.9, 3.0, and 3.1 are sequential and comparable in scope.: 6.8
@joemcgill created a follow-up ticketticketCreated for both bug reports and feature development on the bug tracker. (#63175) to update the tests and might need additional support.
@johnbillion explained that the fail() method is being called because the test environment doesnโt support Argon2. There have been discussions about whether this should cause the test to fail or be skipped. Skipping would be risky, as itโs harder to spot if, for example, the PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version in GitHubGitHubGitHub 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/ Actions suddenly stops supporting something the test depends on. @desrosj is currently investigating why the failures are happening in their setup.
RCrelease candidateOne 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).-Testing and Bug TriagetriageThe act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors.
@joemcgill reminded everyone to monitor the new tickets and forum feedback as RC testing begins. He emphasized flagging any bugs related to the 6.8 release, noting that a few tickets from yesterday still need triaging.
Open Floor ๐ฌ
There were no significant topics that we would list in the summary.
The live meeting will focus on the discussion for upcoming releases, and have an open floor section.
Additional items will be referred to in the various curated agenda sections below. If you haveย ticketticketCreated 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.
Announcements ๐ข
WordPress 6.8 | Release Candidaterelease candidateOne 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). 1 is now available ๐ฅณ
@jeffpaul reminds all CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Committers to read this article and follow the outlined process for the upcoming steps: WordPress 6.8 Release Candidate Phase
We are in the process of finalizing the development notes, after which the Field GuideField guideThe 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. will be released, followed by an email to PluginPluginA 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. Authors containing the necessary information.
GutenbergGutenbergThe 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/ 20.5 is now available
The new version of the Gutenberg plugin is now available in our plugin directory.
Help Test 6.8 BetaBetaA 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. version ๐งช
The Test-Team has written two helpful guides for people interested in testing:
Theย Release Candidateย 2ย release of WordPress 6.8 will be available onย Tuesday, April 1, 2025.
A detailed overview of the release schedule for WordPress 6.8 can be found here. The article also includes information about the individuals assigned to each release party.
Nextย Gutenberg version: 20.6
Gutenberg 20.6 is scheduled for release onย Wednesday, April 2, 2025.
Nextย major releasemajor releaseA release, identified by the first two numbers (3.6), which is the focus of a full release cycle and feature development. WordPress uses decimaling count for major release versions, so 2.8, 2.9, 3.0, and 3.1 are sequential and comparable in scope.: 6.8
The discussion section of the agenda is to provide a place to discuss 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.
Hosting Issues Found During 6.8 RC1 Release Party
During the Release Party of 6.8 RC1, @desrosj observed errors occurring on several hosts. The most common issues involved three specific tests:
These tests resulted in failures on multiple hosts. We should discuss this issue further to identify the causes and potential solutions.
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.
WordPress 6.8 delivers a broad set of developer-focused enhancements that improve extensibility, consistency, and modern standards across the platform. These updates include changes to shortcodes and media handling, expanded theme and blockBlockBlock 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. support, improved adminadmin(and super admin) validation and hooksHooksIn 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 fine-tuned control over post type registration and scheduling APIs. While these updates may not individually warrant their own developer note, they collectively represent important refinements for pluginPluginA 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., theme, and site developers working with WordPress under the hood. This post rounds up the miscellaneous changes worth knowing as you prepare your code for WordPress 6.8.
Table of contents
Removed option to disable the Visual Editor from user profile settings
The option to disable the visual editor was used to enforce the usage of the text interface in the classic editor. This setting was removed in #34681. The setting is removed conditionally; if you have it enabled, it will remain enabled and editable until it is disabled for a user.
The text editor will continue to be an option for all users. $user->rich_editing continues to be a valid user profile field, and the visual editor can be disabled by toggling that value to false.
Changed WP_Image_Editor::generate_filename( $suffix ) to allow empty string as a suffix
The previousย implementation of the WP_Image_Editor::generate_filename() method automatically appended a dimension suffix (e.g., -600ร800) to the file name when no $suffix is provided, or when it is any โfalseyโ value (e.g., null or false).ย
With the addition of image format switching like the switch from .heic to .jpg added in #62359, it became more apparent that there was a need to create copies of files without changing their file names.
In #62385, the behavior of this method was changed to accept an empty string as an intentional value for $suffix. The method will treat false or null as empty values where a dimension suffix should be generated; but will treat an empty string as the desired value for the suffix.
The default function value remains null.ย
For extenders, if you are passing a value into the generate_filename() that could be an empty string, you should ensure that the variable type is null or bool to keep your method behavior unchanged.
Add validation of custom menu links in the classic menu administration
In #60969, validation was added to the classic menu administration when adding custom links. This validation matches the existing validation used in the CustomizerCustomizerTool 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. when adding custom links. It is a partial validation, checking for the following structures:
If your use case requires content in a custom linkโs href attribute that is not a generally valid URLURLA specific web address of a website or web page on the Internet, such as a websiteโs URL www.wordpress.org pattern, it may no longer be accepted.
New action hook in Import administration screen
A new action hook, import_filters, has been introduced to the Import administration screen (/wp-admin/import.php). This enhancementenhancementEnhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. allows developers to execute custom functions at the end of the importers page, aligning its extensibility with other administration screens like Tools. The hook is implemented as follows:
/**
* Fires at the end of the importers Administration screen.
*/
do_action( 'import_filters' );
This addition provides a standardized method for extending the importers page, facilitating the integration of custom functionalities. For more details, refer to #54419.
Update to wp_video_shortcode()HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. attributes
The wp_video_shortcode() function has been updated to generate valid HTML by properly handling boolean attributes. Previously, attributes like loop, autoplay, and muted were assigned a value of "1", leading to HTML validation errors. Now, these attributes are rendered without values, aligning with HTML specifications for boolean attributes. For instance, the loop attribute will now appear as loop instead of loop="1". This change ensures that video elements produced by the shortcodeShortcodeA shortcode is a placeholder used within a WordPress post, page, or widget to insert a form or function generated by a plugin in a specific location on your site. are semantically correct and pass HTML validation. For more details, refer to #60178.
Update to wp_audio_shortcode() HTML Attributes
The wp_audio_shortcode() function has been updated to generate valid HTML by properly handling boolean attributes. Previously, attributes like loop, autoplay, and muted were assigned a value of "1", leading to HTML validation errors. Now, these attributes are rendered without values, aligning with HTML specifications for boolean attributes. For instance, the loop attribute will now appear as loop instead of loop="1". This change ensures that audio elements produced by the shortcode are semantically correct and pass HTML validation. For more details, refer to #61515.
New embeddable argument for register_post_type()
A new embeddable argument has been introduced to the register_post_type() function, allowing developers to control the embeddability of custom post types. By default, this parameter inherits its value from the public argument, ensuring that publicly accessible post types remain embeddable unless explicitly specified otherwise. This enhancement provides greater flexibility in managing content embedding, enabling developers to restrict embedding for specific post types as needed. For more details, refer to #35567.
Updates to body_class classes
Some new classes were introduced to the <body>tagtagA 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.).
The classes wp-theme-<name> and wp-child-theme-<name (when the current theme is a child themeChild themeA Child Theme is a customized theme based upon a Parent Theme. Itโs considered best practice to create a child theme if you want to modify the CSS of your theme. https://developer.wordpress.org/themes/advanced-topics/child-themes/) were added, where <name> represents the sanitized name of the active theme. Please note that these classes are added on both front-end and in the administration. For more information, refer to #19736.
The wp-singular class was added to the list of body classes when viewing a single post object. This class includes a wp- prefix to avoid conflicts with existing classes in themes or plugins. For more information, refer to #35164.
readme.html file is now noindex,nofollow
Because site owners likely donโt intend for the content of the readme.html file to be indexed, as itโs unrelated to the site content. A noindex,nofollowmetaMetaMeta 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. tag was added to this file, to prevent it from being indexed. Polyglot teams that are translating this file manually are encouraged to update their version. For more information, refer to #63069.
Style Book availability for classic themes
The Style Book feature has been extended to support classic themes. This enhancement allows developers and users to preview and understand site colors, typography, and block styles within the context of their classic themes. To utilize the Style Book in a classic theme, ensure that the theme either:
Supports editor styles: Implement this by adding add_theme_support( 'editor-styles' ); in the themeโs functions.php file.
Includes a theme.json file: Incorporate a theme.json configuration file to define global styles and settings.
By adopting either of these methods, classic themes can leverage the Style Bookโs capabilitiescapabilityAย 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)., providing a more consistent and customizable editing experience.
The Block Hooks mechanism has been extended to apply to post content, in addition to its existing support for templates, template parts, patterns, and navigation menus. This enhancement allows developers to insert hooked blocks directly into posts and pages, offering greater flexibility in content customization.
Key considerations:
User expectations: Aligns block insertion capabilities with user expectations across various site components.
Content management: Introduces the ability to manage hooked blocks within individual posts and pages, enhancing content control.
This update provides developers with expanded tools for dynamic content placement, improving the customization capabilities. For more information, refer to #61074.
Block Hooks enabled for Synced Patterns
The Block Hooks feature has been extended to support synced patterns (i.e., core/block blocks). Previously, Block Hooks were applied to templates, template parts, patterns, navigation menus, and post content. This enhancement ensures consistent behavior across all these entities, allowing developers to insert hooked blocks into synced patterns seamlessly. This update provides greater flexibility and control over content customization within the WordPress ecosystem. For more information, refer to #62704.
Standardized behavior for render_block_context FilterFilterFilters 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.
The behavior of the render_block_context filter has been standardized to ensure consistent application across all block levels. Previously, this filter applied differently to top-level blocks compared to inner blocks, leading to inconsistencies in context propagation. Specifically, context provided via render_block_context was available to inner blocks when applied to top-level blocks, but not when applied to inner blocks.
This discrepancy has been addressed, ensuring that context supplied through the filter is uniformly available to all nested inner blocks, regardless of their position within the block hierarchy. For more information, refer to #62046.
Cron APIAPIAn 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.: Introduce a new filter of the same name to wp_next_scheduled()
The wp_next_scheduled hook allows plugin developers to modify the timestamp of the next scheduled event for a given wp-cron job. The full event object, hook name and arguments are provided as additional arguments for this filter. Fore more information, refer to #52655.
HDR Image support for Imagick: new filter to control maximum bit depth of resized images
WordPress 6.8 introduces a new filter, image_max_bit_depth, that developers can use to control the maximum bit depth for resized images. The filter is also passed the original bit depth of the uploaded image. Note that this filter only works when the siteโs hosting supports Imagick and coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. is using the Imagick editor because the GD image editor does not support reading or controlling bit depth (#62285).
By default, the maximum depth matches the bit depth of the original uploaded image. Previously, the maximum bit depth was reduced to 8 for images with higher bit depths, so HDR images were always output with reduced bit depth. Starting in 6.8 HDR images will be output with the bit depth they are uploaded with (for example 12 bits). To enforce the previous behavior, developers can use the following code:
Media: enable setting image output quality by image size
A newย $sizeย parameter was added to theย wp_editor_set_qualityย filter. $size is an array with โwidthโ and โheightโ keys. Developers can use this information to set image quality based on the image size, for example using a lower quality setting for small images (#54648).
Media: control uploading of unsupported media types
In 6.8, a new filterย wp_prevent_unsupported_mime_type_uploadsย controls the behavior of the editor and media library when users upload an image type that the server does not support. By default, users will see an error message that โThis image cannot be processed by the web server. Convert it to JPEG or PNG before uploadingโ. Developers can return false from the filter to enable uploading of these images; however, sub-sized images will not be created (#61167).
UPDATE (14 April 2025): Updated is_embeddable to embeddable for dev notedev noteEach 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. on #35567. Props @mat-lipe.
UPDATE (14 April 2025): Updated after_importers to import_filters for dev note on #54419. Props @afercia.
Now that WordPress 6.8 has entered the Release Candidaterelease candidateOne 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, the following policies are in place.
These policies mainly cover how and when CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. committers can commit. For non-committing contributors, this post may help explain why a Core committercommitterA 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. makes a certain decision.
String Freeze
To allow the Polyglots teamPolyglots TeamPolyglots Team is a group of multilingual translators who work on translating plugins, themes, documentation, and front-facing marketing copy. https://make.wordpress.org/polyglots/teams/ time to get their local languageโs translationtranslationThe process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. of WordPress ready, no new strings are permitted to be added to the release. Existing strings can be removed and/or duplicated if needed.
Seek guidance from the Polyglots team leadership for any strings reported as buggy. A buggy string is one that can not be translated to all languages in its current form.ย
Tickets on the WordPress 6.8 milestone
For the remainder of the cycle, only two types of tickets may be placed on/remain on the 6.8 milestone:
Regressions: bugs that have been introduced during the WordPress 6.8 development cycle, either to existing or new features.
Test suite expansion: tests can be committed at any time without regard to code or string freezes. This can cover either new or existing features.
TrunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. is now WordPress 6.9-alpha
WordPress 6.8 was recently forked to its own branchbranchA directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch"., trunk is now open for commits for the next version of the software.
Backporting to the 6.8 branch
Backporting commits of production code (that is, anything that ends up in the zip file) now requires double sign-off by two core committers. The dev-feedback keyword should be used to request a second committerโs review, dev-reviewed should be added to indicate a second committer has reviewed and approved the commit to the 6.8 branch.
Commits to the test suite do not require double sign-off.
WordPress 6.8 brings a range of smaller yet meaningful updates to the blockBlockBlock 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 that enhance consistency, improve developer experience, and refine default behaviors.ย These changes include refinements to the Navigation blockโs class and markup handling, a new filterFilterFilters 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. for customizing visible post statuses, and updates to the behavior of the iframeiframeiFrame 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. and LinkControl components.ย You will also notice stabilization of previously experimental features, improved block registration requirements, and changes that prepare the block editor for broader extensibility and UIUIUser interface consistency moving forward.ย This post highlights these miscellaneous updates that donโt warrant individual dev notesdev noteEach 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. but are still important to be aware of when building with or extending the block editor.
Customizable Post Status Visibility in Navigation Block Links
The Navigation block now supports filtering of the post statuses of Posts shown in the Navigation on the front of the site. The new filter render_block_core_navigation_link_allowed_post_status defaults to publish but that list can be extended via the hook:
Consistent Class Application for Navigation Block Menu Items
The Navigation blockโs handling of the current-menu-ancestorCSSCSSCascading Style Sheets. class has been updated for improved consistency.ย Previously, the current-menu-item class was applied to the <li> element of the current menu item, while the current-menu-ancestor class was applied to the <a> element of ancestor items.ย This inconsistency posed challenges for developers aiming to style navigation menus uniformly.ย With the changes introduced in #67169, both classes are now applied to their respective <li> elements, ensuring a consistent and predictable structure for styling purposes.
Key Change:
The current-menu-ancestor class is now applied to the <li> element of ancestor menu items, aligning its behavior with that of the current-menu-item class.
Implications for Developers:
This update standardizes the application of CSS classes within the Navigation block, simplifying the process of targeting and styling current and ancestor menu items.
Developers should review and adjust any custom styles or scripts that rely on the previous application of the current-menu-ancestor class to ensure compatibility with this change.
By implementing this adjustment, WordPress 6.8 enhances the consistency and reliability of its Navigation block, facilitating more intuitive and maintainable menu styling for developers.
Consistent Markup for Navigation Item Labels
The Navigation block has been updated to enhance consistency between navigation items and submenu items.ย Previously, navigation items containing submenus lacked the <span class="wp-block-navigation-item__label"> wrapper around the navigation item text, which was present in standard navigation items.ย This inconsistency made styling and scripting more challenging for developers.ย With the changes introduced in #67198, both navigation items and submenu items now include this <span> wrapper, ensuring uniform markup structure across all navigation elements.
Key Changes:
Consistent Markup: All navigation items, including those with submenus, now wrap the item text within a <span class="wp-block-navigation-item__label"> element.
Implications for Developers:
Simplified Styling: The uniform use of the <span> wrapper allows for more straightforward and consistent CSS targeting of navigation item labels.
Enhanced Scripting: Developers can now reliably select and manipulate navigation item labels using JavaScriptJavaScriptJavaScript 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, regardless of whether the item contains a submenu.
By standardizing the markup structure of navigation items, WordPress 6.8 improves the developer experience when customizing and extending navigation menus.
Stabilize the isPreviewMode settings flag
The isPreviewMode settings flag is now stable, and using select( โcore/block-editorโ ).getSettings().__unstableIsPreviewMode will now log a deprecation warning.
This public flag is commonly used to disable behaviors that cannot be used when rendering block or template previews. A good example is keyboard shortcuts.
Continuing the effort to use iframed content in the post editor initiated in WP 5.9. Starting from WP 6.8, the editor will always render iframed content for block themes. This behavior was only enabled when using the GutenbergGutenbergThe 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/pluginPluginA 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..
Edited April 1, 2025: This changeset was reverted #69778.
Block registration: Normalize blockType.parent to an array
The block registration APIAPIAn 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. now enforces the parent setting to be an array. The editor will now display a warning if itโs a different type, such as a `string`.
The LinkControl component, which has been in an experimental state for several years, is being stabilized in WordPress 6.8. This change affects plugin developers who are using the __experimentalLinkControl component in their custom blocks or extensions.
For backwards compatibility, the __experimentalLinkControl import will continue to work but will display deprecation warnings.
In addition, the following sub components have been deprecated:
The RadioGroup component has been deprecated. To be consistent with the current WordPress design system, use RadioControl or ToggleGroupControl instead.
This prop was originally intended for adding a custom click handler to the suffix button to close the search field entirely, rather than just clear the input value.
The pattern of repurposing the search clear button as a search close button is no longer used in WordPress, and is no longer recommended as a UIUIUser interface pattern since it can be confusing to users.
If you were relying on this prop, we recommend adding a separate close button to your UI.
The ButtonGroup component has been deprecated, as it can easily lead to accessibilityAccessibilityAccessibility (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) issues. For simpler adherence to accessibility best practices and to be consistent with the current WordPress design system, use ToggleGroupControl instead.
UI components across the editor (input fields, buttons, etc.) are currently rendering in a range of heights between 30px and 40px. To add consistency and visual polish to the editorโs UI, we started working on standardizing components toward a default height of 40px.
Continuing the standardization effort started in previous releases, for the WordPress 6.8 release, we will start logging deprecation warnings for the following components if they are not yet opting into the new default size:
BorderBoxControl
BorderControl
BoxControl
ComboboxControl
CustomSelectControl
DimensionControl
FontAppearanceControl
FontFamilyControl
FontSizePicker
FormFileUpload
FormTokenField
InputControl
LineHeightControl
NumberControl
Radio
RangeControl
SelectControl
TextControl
ToggleGroupControl
TreeSelect
UnitControl
To start opting into the new 40px default height, set the __next40pxDefaultSize prop.
Modal: Buttons in headerActions should use โcompactโ size
The close button in the Modal component has been enlarged from the โsmallโ button size (24px) to use the โcompactโ button size (32px).
If you are using the headerActions prop to inject buttons beside the close button, we recommend you also use the โcompactโ button size variant to match.
The legacy set of __experimentalNavigator* APIs is deprecated and should instead be imported as Navigator. All of the sub-components are also available via the Navigator namespace.
Moreover, the __experimentalNavigatorToParentButton component and the goToParent method available via the __experimentalUseNavigator hook are now deprecated, and they now behave identically to the __experimentalNavigatorBackButton and the goBack method.
WordPress 6.8 comes with a few new best practices and requirements in the Interactivity APIAPIAn 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. that are part of a longer-term continuous-improvement effort. Some of the relevant changes in 6.8 are an intermediary step: They do not include these enhancements themselves, but they prepare the project to add them in a future release by adding two new deprecation warnings.
If you have been using the Interactivity API in your project, especially if you have been writing your own stores, please read on to learn how you can prepare your changes for the latest and future behavior of the API.
How to apply the latest best practices (and avoid deprecation warnings)
To help the Interactivity API speed up WordPress, the project is working towards running most store actions asynchronously by default, as a better foundation for achieving good INP (โInteraction to Next Paintโ) performance. Right now, browsers invoke all synchronous Interactivity API event handlers as part of the same taskโthis means they stack up. This can make the user wait for longer than 50 milliseconds (also called a โlong taskโ) for the site to reactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org to some interaction, like clicking a button.
Starting with 6.8, and going forward, the Interactivity APIโs push towards asynchronous handlers as the default will make those long tasks less likely. The 6.8 release only prepares for the transition. In the following WordPress release, the API will automatically yield to the main thread in between handlers, so ideally thereโs nothing to stack up, and nothing to make the user wait. (Also refer to async actions and the splitTask() function.)
This performance enhancementenhancementEnhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. also helps with cross-pluginPluginA 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. compatibility, as handlers for the same event may come from different plugins. The new requirements outlined below are an important step to prepare the Interactivity API for that future.
Wrap certain action callbacks in withSyncEvent()
Pay attention to any store action that is attached to an event listener (like data-wp-on--click) and accesses the event object: If the action callback uses any of the event properties or methods below, you need to wrap it in a newly added utility function called withSyncEvent():
Property: event.currentTarget
Method: event.preventDefault()
Method: event.stopImmediatePropagation()
Method: event.stopPropagation()
Starting in WordPress 6.8, if any action callback uses the above event properties or methods and is not wrapped in withSyncEvent(), that action callback will trigger a deprecation warning. For now, the logic will continue to work as before. But in a future WordPress release it will break if you do not migrate. For example, event.preventDefault() will not prevent the default action since the action will be asynchronous by default. As such, please make sure to resolve any deprecation warnings you see.
This correct (โ ) code example illustrates how to use withSyncEvent():
import { store, withSyncEvent } from '@wordpress/interactivity';
store( 'myPlugin', {
actions: {
// `event.preventDefault()` requires synchronous event access.
preventNavigation: withSyncEvent( ( event ) => {
event.preventDefault();
} ),
// `event.target` does not require synchronous event access.
logTarget: ( event ) => {
console.log( 'event target => ', event.target );
},
// Not using `event` at all does not require synchronous event access.
logSomething: () => {
console.log( 'something' );
},
},
} );
This bad (โ) example will, going forward, emit a deprecation warning:
import { store } from '@wordpress/interactivity';
store( 'myPlugin', {
actions: {
// Missing `withSyncEvent()` around synchronous event access.
preventNavigation: ( event ) => {
event.preventDefault();
},
},
} );
Do not use actions to determine HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. attribute values
If you have been relying on Interactivity API store functions (like actions or callbacks) to determine HTML attribute values (e.g. via data-wp-bind--attr), please revise these attributes now. Instead, use global state, local context, or derived state. And please do not combine these function calls with directive logic like the ! operator.
Starting in WordPress 6.8, any directive using a store function in combination with the ! operator will emit a deprecation warning. The logic will continue to work as before for now, but in a future WordPress release it will break if you do not migrate. More broadly, if you are using store functions in directives that determine HTML attribute values, please migrate to using global state, local context, or derived state instead. More deprecation warnings around incorrect usage of store functions are expected soon, and eventually unmigrated code is going to break.
Please refer to the following correctย (โ ) code example to illustrate how to use derived state:
import { store } from '@wordpress/interactivity';
store( 'myPlugin', {
state: {
get isOpen() {
const ctx = getContext();
return !! ctx.open;
},
},
} );
To provide context on why this new requirement is relevant: Using store functions for anything other than the โonโ, โinitโ, or โwatchโ groups of directives has always been an anti-pattern. It is now being more formally discouraged, and will in the future be made impossible.
Support for the .length property in directives
An additional Interactivity API enhancement in WordPress 6.8 is support for the .length property on strings and numeric arrays in directives, ensuring consistency between server and client rendering.
Previously, the .length property was unavailable on the server, requiring workarounds. This update allows developers to use .length within all directives that reference global state, local context, or derived state, aligning behavior across environments.
This code example illustrates using the .length property:
This improvement streamlines logic and improves developer experience.
Summary and further reading
Please refer to the following links for further reading:
GutenbergGutenbergThe 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 request #68097 for the withSyncEvent and new directive requirement enhancements
Gutenberg issues #64944 and #69552 with additional context on the long-term plans to run Interactivity API actions asynchronously by default.
Gutenberg issue #69269 with additional context on the long-term plans to more clearly separate directives that do something vs that determine a value.
TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ticketticketCreated for both bug reports and feature development on the bug tracker.#62582 for support of the .length property.
Last week, there were some exciting developments in theย GutenbergGutenbergThe 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/ย Editor. Below, youโll find an overview of the key changes and improvements.
Need AccessibilityAccessibilityAccessibility (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) Feedback
Add a search to the template selection modal in the block editor โ When you are editing a page or post in the blockBlockBlock 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, there is an option to change the template.
UIUIUser interface Components: UI Components: Add theming support for all the components โ Some components currently lack theme support, limiting their adaptability to different design systems. This issue serves as a general tracker to identify those components and systematically incorporate theming support.
Block APIAPIAn 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.: wp_register_block_metadata_collection doesnโt work with multiple blocks with identical folder names โ Using wp_register_block_metadata_collection to improve block registration/loading performance and noticed that the php array created by running โwp-scripts build-blocks-manifestโ
Block Bindings: Function canUserEditValue result change not affect Block behaviours โ Having a custom Bock Binding Source you might encounter the situation when users accidentally change bound content and that change escalates through setValue to the very source ending up with changes in database or external system.
PR Editor: fix: missing default category on new posts โ Automatically assigns the default categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. for new posts in the category taxonomyTaxonomyA 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. using the useEffect hook to set when no terms are present but only if itโs a new post and settings have been loaded.ย
PR โ [New block] bookmark and bookmark count โ Currently, WordPress lacks a built-in way for users to bookmark or favorite posts for later reading. This is an essential feature for content-heavy sites, similar to YouTubeโs Watch Later or social media Saved Posts features.
Excerpt Block: Add character count option โ This PR adds a character count option to the ExcerptExcerptAn 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. Block as an alternative to the existing word count functionality, allowing theme designers to control excerpt lengths more precisely.
Needs Design Feedback:
The List View sidebar needs a โNo block selected.โ message โ Currently, when a user creates a new post or there are no blocks in the editor, the List View panel on the left shows a blank white column. Adding a โNo block selected.โ message would improve the user experience by providing clearer feedback.
WordPress 6.8 introduces a new filterFilterFilters 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.should_load_block_assets_on_demand, which runs as part of a new function wp_should_load_block_assets_on_demand(). The filter complements the existing should_load_separate_core_block_assets filter by more clearly separating concerns of both filters.
Until now the should_load_separate_core_block_assets filter had two different purposes:
Loading separate stylesheets for CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. blocks, instead of a combined wp-block-library stylesheet (as the name indicates).
Loading blockBlockBlock 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. scripts and stylesheets on demand only if the blocks are included in the page (not indicated by the name).
Now the new filter (and its surrounding function) handles only the second purpose. To maintain backward compatibility, the existing filter still works for both purposes. But going forward, please use it only for the first purpose.
Having the two separate filters for these purposes lets you control them separately. For example, as a site owner who wants to opt in to loading block scripts and stylesheets on demand, but keep loading the combined wp-block-library stylesheet with your classic theme, now you can:
Block themes now opt in by default to both features, similar to how they were already doing before via just the one filter.
Refer to TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ticketticketCreated for both bug reports and feature development on the bug tracker.#61965 for more context.
The screen-reader-textCSSCSSCascading Style Sheets. class is a small bit of CSS used in WordPress to hide text visually but still make it available to assistive technologies, screen readers, and any other software reading a page.
Given poor browser support for the clip-path property, the class has supported the deprecated clip property longer than it probably needed to. WordPress 4.9 did finally add support for clip-path, which now has wide support without prefixes across browsers.
WordPress 6.8 takes two more steps to modernize the class: it removes the clip property and the prefixed -webkit-clip-path property. Worth noting this change applies to the CSS class used in the WordPress adminadmin(and super admin) pages and across all bundled themes.
The only changes are the removal of the clip property and -webkit-clip-path.
In most cases this small change shouldnโt require any update to plugins and themes. But be aware of one case: when the screen-reader-text CSS class is used to dynamically reveal text. In a few cases, WordPress itself reveals some visually hidden text. For example, when thereโs no JavaScriptJavaScriptJavaScript 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 support or on small screens, screen-reader-text gets reset to make the visually hidden text visible again:
If you make an update to a similar CSS technique in your pluginPluginA 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. or theme admin pages, donโt forget to remove the clip property from the associated reset CSS.