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.
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, as below. If you haveย ticketticketCreated for both bug reports and feature development on the bug tracker.ย requests for help, please do continue to post details in the comments section at the end of this agenda.
Announcements
WordPress 6.6 RC3 was released on July 9. We are in a hard string freeze. Note that theย dev-feedbackย andย dev-reviewedย workflow is required prior to committing to the 6.6 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". (handbook reference).
Forthcoming releases
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.6
We are currently in the WordPress 6.6 release cycle. The WordPress 6.6 is scheduled for Tuesday, July 16. There will be a dry run of the release on Monday, July 15 which starts a 24-hour code freeze of the 6.6 branch.
Next maintenance release
No maintenance releases are currently being planned. We will take time to discuss any important tickets that may require a maintenance release.
Next 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/ release: 18.8
Gutenberg 18.8 is scheduled for July 17 and will includeย these issues. This version will NOT be included in the WordPress 6.6 release and will be included with 6.7.
Discussions
As weโre at the end of the 6.6 release cycle, weโll prioritize any items for this release. Please review the Editor Updates section of this agenda for a list of updates on several key features related to this release.
Review status of any outstanding issues (if applicable)
You can keep up to date with the major Editor features that are currently in progress by viewing these Iteration issues.
Props to @annezazu for putting together these updates each week.
Canonical blocks: thereโs aย latest updateย from some folks working to explore the idea. TLDR: work on a few requested blocks but put these blocks behind an opt-in feature flag in the GB 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 to allow for quickly iterating and experimenting.
The propotype for theย DataFormย 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. has landed in the plugin. It renders theย Duplicate action modalย for pages and follow-up work includes replacing other action modals until the pieces are in place to create a details panel for a post type.
Font Library: a PR is underway toย group fonts by sourceย to better distinguish what might be installed by a theme vs a user andย a new PRย building on a prior effort is in process to add a font size preset UIUIUser interface to allow users to edit the font size presets using the editor.
Inserter: A PR landed toย Remove the dialog behaviour, meaning the Inserter now remains open to match how all the other panels work.
Interactivity API: new iteration issue has been sharedย Interactivity API iteration for WordPress 6.7. TLDR: work will begin on the Gallery 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. lightbox and the Query blockโs Instant Search along with internal improvements to ensure that the Interactivity APIโs code is as simple and stable as possible.
Please include details of tickets / PRs and the links in the comments, and if you intend to be available during the meeting if there are any questions or you will be async.
WordPress 6.6 RC2ย was released yesterday, on July 2. We are still in a hard string freeze. Note that theย dev-feedbackย andย dev-reviewedย workflow is required prior to committing to the 6.6 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". (handbook reference).
A big thank you to everyone who is working on these releases!
Forthcoming Releases
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.6
We are currently in theย WordPress 6.6 release cycle. See theย Roadmap Postย for more information about what is planned for this release. The 6.6 RC3 is scheduled for Tuesday, July 9.
Next maintenance release
No maintenance releases are currently being planned. @mikachan noted that based on the latest messages in theย #6-5-release-leadsย channel, all seems good!
Next 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/ release: 18.8
No discussion was had about the next Gutenberg release during this meeting.
Discussion
Nobody proposed any discussion topics for this week, so @mikachan addressed some follow-up tasks from our last meeting.
Can we extend the hard string freeze date to 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). 3 for major releases?
@audrasjb did not have any further updates from last week.
@marybaum suggested that maybe RC 2 would be a possible milestone for string freeze
@mikachan asked if we need to update any handbook docs and suggested being more specific about this in theย Release Candidateย section, and note which 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). triggers the hard string freeze.
Do we have further information on who can help progress a PR in the WordPress Importer repo?
@mikachan shared an update from @joemcgill that heโs reached out to some folks familiar with the WP Importer 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 to clarify next steps for maintaining that plugin and is awaiting some feedback. We hope to have an update by next week.
Open Floor
Imdad suggested that we update the documentation about the Future Release milestone in TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress., but wasnโt around to clarify what would be helpful.
Note: Anyone reading this summary outside of the meeting, please drop a comment in the post summary, if you can/want to help with something.
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, as below. If you haveย ticketticketCreated for both bug reports and feature development on the bug tracker.ย requests for help, please do continue to post details in the comments section at the end of this agenda.
Announcements
WordPress 6.6 RC2 was released on July 2. We are in a hard string freeze. Note that theย dev-feedbackย andย dev-reviewedย workflow is required prior to committing to the 6.6 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". (handbook reference).
Forthcoming releases
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.6
We are currently in the WordPress 6.6 release cycle. The WordPress 6.6 RC3 is scheduled for Tuesday, July 9.
Next maintenance release
No maintenance releases are currently being planned. We will take time to discuss any important tickets that may require a maintenance release.
Next 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/ release: 18.7
Gutenberg 18.7 is scheduled for July 3 and will includeย these issues. This version will NOT be included in the WordPress 6.6 release and will be included with 6.7.
Discussions
As weโre in the middle of the 6.6 release cycle, weโll prioritize any items for this release. Please review the Editor Updates section of this agenda for a list of updates on several key features related to this release.
You can keep up to date with the major Editor features that are currently in progress for 6.6 by viewing these Iteration issues.
Props to @annezazu for putting together these updates each week.
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. bindings 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.:ย open question started aroundย Should the bindings logic be moved to core functions instead of using a hook?ย and recent request for new designs forย the ability to add/remove bindings in attributes panel.
Twenty Twenty-Fiveย is open for business with a fresh 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/ repo:ย https://github.com/WordPress/twentytwentyfive
Typography tools:ย Adding Font size presets UIย to handle creation, update and removal of font size presets.
Tickets for assistance
Tickets for 6.6 will be prioritized.
Please include details of tickets / PRs and the links in the comments, and if you intend to be available during the meeting if there are any questions or you will be async.
Follow-ups from last week
There were a couple of points raised in last weekโs dev chat that would be good to check in with:
Can we extend the hard string freeze date to 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). 3 for major releases?
Do we have further information on who can help progress a PR in the WordPress Importer repo?
WordPress 6.5 introduced the Block Bindings API, which, among other things, allows users to easily connect blocks to custom fields. For example, users can directly connect paragraph content without the need to create a custom 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., and it will show the selected post metaMetaMeta 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. value.
Until now, when this connection existed, the UIUIUser interface to edit the paragraph was locked, preventing users from modifying its value.
WordPress 6.6 introduces the possibility of editing the value of the custom fieldCustom FieldCustom Field, also referred to as post meta, is a feature in WordPress. It allows users to add additional information when writing a post, eg contributorsโ names, auth. WordPress stores this information as metadata. Users can display this meta data by using template tags in their WordPress themes. directly from the block when they are connected.
You can see the potential of it in this quick demo:
As can be seen in the video, whenever a block attribute is connected to the Post Meta source, it automatically connects to the custom field value while editing.
Among improvements to the UI to clarify when a block is connected, it comes with some functionalities that are worth mentioning as well:
Custom fields can be updated from a query loopLoopThe 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.
While using blocks in the query loop, if they are connected to Post Meta, they are also editable.
When multiple blocks are connected to the same custom field, their value is synced
Users can only edit the custom fields from posts where they have permission
Right now, this is restricted to coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. sources like Post Meta or Pattern Overrides, but the idea is to open the relevant APIs to be used by any external source as well.
Read more about this iteration for Block Bindings at #60956
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. development for WordPress 6.6 has been focused on maintenance. Its updates include new features and directives, a better debugging experience, and improved code quality.
WordPress 6.6 includes three new directives aimed at improving performance:
data-wp-on-async
data-wp-on-async-document
data-wp-on-async-window
Theseย asyncย directives optimize event callbacks by first yielding to the main thread. That way, complex interactions wonโt contribute to long tasks, improving theย Interaction to Next Paintย (INP). You can read more about this approach inย Optimize Interaction to Next Paint.
These directives are recommended over the sync ones (data-wp-on,ย data-wp-on-document, andย data-wp-on-window), but you can use them only when you donโt need synchronous access to theย eventย object, specifically if you need to callย event.preventDefault(),ย event.stopPropagation(), orย event.stopImmediatePropagation(). The directives in coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. blocks have been updated to use async where available.
When you must resort to using the non-async directives, theย @wordpress/interactivityย package now exports aย splitTaskย function which can be used to manually split yield an action to the main thread after calling the synchronous event API. Please see the documentation onย async actionsย for how to implement this.
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/ pull requests: #61885 and #62665
Support for derived state props inside wp_interactivity_state
Since WordPress 6.5, developers can define the initial state of interactive blocks in the server with wp_interactivity_state(). Directives referencing these state properties are evaluated to render the final HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.. However, derived state props, defined as getters in 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/., were a feature missing in PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher.
In WordPress 6.6, the wp_interactivity_state() function now accepts derived state props using Closures (anonymous functions). This feature is equivalent to the getters already used in JavaScript inside the store() function exposed from the @wordpress/interactivity package.
In the same way, the Closures can access the current Interactivity API context by calling the new wp_interactivity_get_context() functionโequivalent to their JavaScript version, getContext(). This function returns the current context for either the current namespaceโwhen omittedโor the specified one. Also, wp_interactivity_state() can be used when the value depends on other parts of the state.
Itโs important to note that using Closures for derived state is not always necessary. When the initial value is static, and the Closure will always return the same value because the values it depends on do not change on the server, regular values can be used instead:
Read more about this new feature on the 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.#61037 and in the GitHub Issue #6394
Integration with Preact Devtools
The Interactivity API runtime uses Preact internally to transform directives into components and manage all DOM updates. Since WordPress 6.6, developers can use Preact Devtools to inspect interactive blocks and check the component tree for all rendered directives.
To enable this feature, the SCRIPT_DEBUG constant must be enabled. This constant makes WordPress serve an extended version of the Interactivity API runtime thatโs compatible with the Preact dev tools.
In the future, there are plans to improve the displayed information by including the names of the directives used in each of the elements, among other enhancements.
Read more about this new feature on the TRAC ticket #61171 and in the GitHub PR #60514
Interactivity API warnings in 6.6
In WordPress 6.6, both the server-side directives processing and the JavaScript runtime will warn developers when the directives, the namespace, or the markup cannot be evaluated.
To enable this feature, the SCRIPT_DEBUG constant must be enabled.
Warning messages will be shown for the following cases:
Unbalanced HTML tags
If the processed HTML contains any unbalanced 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 server processing will bail out. This causes the flash effect on page load. Now, developers will find which tag is missing within a warning message.
One example could be <span data-wp-text=โhelloโ />
Unsupported HTML tags
Some tags, like SVG or MathML ones, are not yet supported by the HTML API, which is used internally by the Interactivity API. Directives inside them or in their inner tags wonโt be server-side processed. Now, a warning will appear if any directives are found in those positions.
Non-parseable data inside data-wp-context
The context data provided to data-wp-context directives must be a valid JSONJSONJSON, 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. stringified object.
InvalidinvalidA 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. namespace inside data-wp-interactive
The value passed to data-wp-interactive directive cannot be an empty object {}, an empty string, or a null value. Namespaces must be non-empty strings.
WordPress 6.6 RC1ย was released on June 25. We are now in a hard string freeze. Note that theย dev-feedbackย andย dev-reviewedย workflow is required prior to committing to the 6.6 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". (handbook reference).
WordPress 6.5.5, a security release, was shipped on June 24.
Great work getting all of these milestones done this weekย
Forthcoming Releases
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.6
We are currently in theย WordPress 6.6 release cycle. The WordPress 6.6 RC2 release is scheduled for next Tuesday, July 2. Please reviewย this postย for an update about 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.
@meher brought up a discussion from the #6-6-release-leads channel about the string freeze in the release candidate stage. We discussed when the soft string freeze should happen and if it should exist, when the hard string should happen, how these two different freezes are different and if there are any exceptions.
Hard freeze: Seeย String freeze. A hard string freeze or a hard freeze is announced when all the strings of the upcoming release are frozen including the strings of the About page. A hard freeze is the final string freeze before a release.
Soft freeze Seeย String freeze. A soft string freeze or โsoft freezeโ is announced when all the strings of an upcoming WordPress release are frozen, except for the strings of the About page.
@desrosj suggested we decide on the course of action for this release (6.6) and then do the research suggested here to adjust the practice going forward.
@audrasjb also found an example of a string change after the hard string freezeย here.
Weโre currently operating in a Hard Freeze for 6.6
@audrasjb is going to check with Polyglots to see if we can extend that date to 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). 3
If we really do need Hard Freeze to start at RC1, we will update our docs for future releases
Weโll aim to have an update and share by next weekโs Dev Chat.
Next maintenance release
No maintenance releases are currently being planned. However, we discussed follow-up tickets that were opened following the 6.5.5 release.
The most annoying post-6.5.5 ticketticketCreated for both bug reports and feature development on the bug tracker. was #61488. It was fixed in 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. and is waiting for potential backportbackportA 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. to branch 6.5. Question is: do we need a 6.5.6 for this?
@jorbin noted that weโre waiting to see how #61489 shakes out, and we should allow for a day or two if possible so that 6.5.7 does not need to follow quickly behind.
Next 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/ release: 18.7
Gutenberg 18.7ย is scheduled for July 3 and will includeย these issues. This version will NOT be included in the WordPress 6.6 release.
Discussion
The main discussion was around 6.6 this week, so we moved straight onto the Open Floor section.
Open Floor
@grantmkin asked if we could discuss this issue to allow themes to side-load single block plugins, which could help seamlessly open up more creativity and options baked into 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. themes:
As Iโve been looking into the idea of canonical block plugins, one point of feedback Iโve received from theme designers is a desire to use such blocks in theme templates and patterns. One example shared was the desire for a tabs block to use in a product page template. If youโre releasing the theme for general use (rather than it being specific to an individual site) youโre currently limited to using coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. blocks. And naturally, weโre conservative about adding new blocks to core. So Iโm curious about possibilities for making more blocks available for use in themes and patterns.
There were several comments and questions raised, including:
Sounds a lot like 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 dependencies for theme. โ @afragen
So not just starter content for themes, but starter blocks?ย Interesting, seems pretty reasonable desire for themes. โ @jeffpaul
I wonder what a fallback would look like if a block was no longer available in the repo as well? Would it just no longer show, or would there be a way for the external block to fall back to core blocks? โ @joemcgill
In principle the idea of blocks like this is good because keeps them outside theme.ย โ @karmatosed
@poena highlightedย if the plugin that has that block is not installed, the user will be prompted to install it. If they donโt install it, they can keep the block as is, or delete it. So what is the problem weโre trying to solve with side-loading single block plugins?
@poena also noted that themes in theย wordpress.orgย theme directory are not allowed toย requireย plugins. That does not mean that those themes are not allowed toย recommendย and use block plugins.
@mmaattiiaass also raised a discussion about the WordPress Importer project:
I would like to discuss the current state ofย WordPress-importerย project. I think itโs an important piece for production sites, and it seems to be unattended. Example: the font assets can not be imported automatically because that functionality wasnโt shipped to the users.ย Thereโs a PR adding that functionalityย that has been sleeping for months without any review despite being flagged as a blockerblockerA bug which is so severe that it blocks a release. for the font library in the WordPress 6.5 release.
#360835ย is a fix for few bugs introduced in WP 6.5. Itโs been ready for about two months now. Yes, there are some different opinions there but the best way to iron out any differences is to have more reviews, right?ย
@joemcgill highlighted that as an aside, it seemed like one of the things that has stalled the refactoring efforts is that there was an expectation set that there would be a proposal posted on make/core outlining the plan for more top-level directories like theย /fontsย directory. Joe offered to follow up with any updates for this.
Note: Anyone reading this summary outside of the meeting, please drop a comment in the post summary, if you can/want to help with something.
Now that WordPress 6.6 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). (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).) 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.ย In such case, another RC may eventually be released to update the related strings. This will be done in a responsible and reasonable manner, only when necessary.
Tickets on the WordPress 6.6 milestone
For the remainder of the cycle, only two types of tickets may be placed on/remain on the 6.6 milestone:
Regressions: bugs that have been introduced during the WordPress 6.6 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.7-alpha
WordPress 6.6 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.6 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.6 branch.
Commits to the test suite and docblockdocblock(phpdoc, xref, inline docs) changes do not require double sign-off.
This guide outlines major developer features and breaking changes in 6.6 and is published in 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). cycle to help inform WordPress extending developers, CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. developers, and others.
This release includes 392 enhancements, 462 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. fixes, and 46 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) improvements for the Block Editor (a.k.a. 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/).
Below is the breakdown of the most important developer-related changes included in WordPress 6.6.
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
WordPress 6.6 brings 8 Gutenberg releases into core โ 17.8, 17.9, 18.0, 18.1, 18.2, 18.3, 18.4, and 18.5. The Block Editor receives several improvements related to the ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. library, the 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., Themes, and more.
React
A new version of React and the new JSX transform is available in WordPress 6.6.
WordPress 6.6 introduces several theme-related updates, including:
A new version 3 of theme.json
Uniform CSSCSSCascading Style Sheets. specificity applied across core styles
Introduction of section styles to streamline the styling of blocks and their internal elements
Additional features for the grid layout type in blocks
CapabilitycapabilityAย 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 define site-wide background images in theme.json and the Site Editor
WordPress 6.6 includes updates for the Interactivity API, such as new async directives, support for derived state props from PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher, integration with Preact Devtools, and new warning messages available when the SCRIPT_DEBUG configuration constant is enabled.
HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. API
WordPress 6.6 includes a helpful maintenance release to theย HTMLย API. This work includes a few new features and a major improvement to the HTML Processorโs usability. This continues the fast-paced development sinceย WordPress 6.5.
Thereโs also a new data structure coming in WordPress 6.6 for the HTML API: theย WP_Token_Map.
Several changes have been made to the Options API to support an optimization for the autoloading behavior, and to create a way to apply further optimizations going forward.
I18Ni18nInternationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill.
One of the highlight features included in WordPress 6.6 is the automatic rollback of 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 auto-updates upon detecting PHP fatal errors.
New/Modified 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.
Modified 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. Hooks
Allowed disabling autosave support for individual post types
[58201] added a way to allow disabling autosave support for individual post types. Not all post types support autosaving. By making autosave a post type feature, support can be more granularly handled without any workarounds or hardcoded allowlists. For backward compatibility reasons, adding editor support implies autosave support, so one would need to explicitly use remove_post_type_support() to remove it.
Twenty Sixteen: Fixed mismatch of visual and DOM order of elements
Starting in Twenty Sixteenโs version 3.3 (released with WordPress 6.6), the site information links remain below the social navigation at any screen size. Before that, the social navigation had displayed after the site information on larger screens, which created a mismatch between the visual order and the Document Object Model (DOM) order.
The two footer elements are stacked, now at screen widths larger than 910 pixels.
If you would like to have the two elements side-by-side, with the social navigation first, you could paste styles in 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/. or in the Customizerโs Additional CSS panel.
Check the instructions on how to do this
@media screen and (min-width: 56.875em) {
/*
1. Reset the social navigation width.
2. Adjust margins to place site info along the right edge.
*/
.site-footer .social-navigation {
width: auto;
margin: 0.538461538em auto 0.538461538em 0;
}
.site-info {
margin: 0;
}
/* Reverse the margins for right-to-left languages. */
.rtl .site-footer .social-navigation {
margin: 0;
}
.rtl .site-info {
margin: 0.538461538em auto 0.538461538em 0;
}
}
Custom CSSCSSCascading Style Sheets. could place the site information links on the right side.
Default length of time for comment author cookies has changed
[58401] changed the default length of time for comment author cookies from 0.95129375951 of a year to 1 year by taking advantage of the YEAR_IN_SECONDS constant. The comment_cookie_lifetimefilterFilterFilters 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. can still be used to change this value.
#61109 now directs a classic themeโs Appearance > Patterns menu to the site editor Patterns view (/wp-admin/site-editor.php?path=/patterns), providing a consistent pattern and template management experience regardless of theme type. For themes with block-template-parts support, the Appearance > Template Parts menu has been removed, with template parts now accessible under the site editorโs Patterns > Template Parts view.
Fluid Typography
Some theme.json presets require custom logic to generate their values, for example, when converting font size preset values toย clamp()ย values.
The custom logic is handled by callback functions defined against theย value_funcย key inย WP_Theme_JSON::PRESETS_METADATA. The callback functions are invoked inย WP_Theme_JSON::get_settings_values_by_slug().
In WordPress 6.6, settings of the currentย WP_Theme_JSONย instance,ย are now passed to these callback functions. The permits callback functions to return values that rely on other settings in the theme.jsonJSONJSON, 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. tree.
In the case of font sizes presets,ย it fixes a bugย whereby the callback function โย wp_get_typography_font_size_value()ย โ was not taking into account settings values passed directly to theย WP_Theme_JSONย class.
External libraries
jQuery UIUIUser interface library update
The jQuery UI library was updated to version 1.13.3. For more information on the changes included, see jQuery UI 1.13.3 release notes.
Login and Registration
New array arguments for wp_login_form
Theย wp_login_form()ย function has two new array arguments:ย required_usernameย andย required_password. Passing true to these arguments adds the โrequiredโ attribute to the input fields.
MultisitemultisiteUsed to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site
Custom ports for multisite site addresses
#21077 made it possible to install and operate a Multisite installation on a host name that includes a port number, and the corresponding #52088 added full support for this to the local development environment. This means itโs now possible to run Multisite on an address such as localhost:8889.
Update enabled mime types for new multisite installs
In #53167, the list of mime types that are enabled for upload were aligned to those enabled by regular sites by switching from a hard-coded list of types (that had become outdated) to using coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.โs get_allowed_mime_types function. This ensures that new multisite installs are up to date with the current mime types supported in core, including the recently enabled image/webp and image/avif types.
Note that, since this is only used to populate the schema for new networks, it will only affect newly created multisite networks โ it does not change the allowed mime types for existing networks. To adjust the mime types allowed for existing sites, developers can continue to use an approach as follows for filtering the upload_filetypes option:
Script Loader
Obsolete polyfills dependencies have been removed
In [57981], now obsolete polyfills such as wp-polyfill, wp-polyfill-inert and regenerator-runtime were removed from the react script dependency in WordPress, as they are no longer needed in modern browsers supported by WordPress. Developers relying on wp-polyfill need to manually add it as a dependency to their scripts.
Script modules can now be used in the WordPress adminadmin(and super admin)
With #61086, script modules can now be used in the WordPress admin. Before WordPress 6.6, script modules were only available on the front end.
Toolbar
Search has a much later priority
Inย [58215], the search input on the front-end admin bar is added at a different priority. It was previously inserted at priority 4 and then floated to appear at the end of the admin bar. It is now inserted at priority 9999 to load at the end of the admin bar without CSS manipulation.
Extenders placing admin bar nodes after the search or replacing core search should take the new priority into consideration.
Example: Assign different priority based on WordPress version
WordPress 6.6 includes a helpful maintenance release to the HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.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.. Included in this work are a few new features and a major improvement to the usability of the HTML Processor. This continues paced development since WordPress 6.5.
This may be surprising, but PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher leaves us hanging if we want to properly read the text content of an HTML document. The html_entity_decode() and htmlspecialchars_decode() functions work somewhat well for pure XML documents, but HTML contains more complicated rules for decoding, rules which change depending on whether the text is found inside an attribute value or normal text. These functions default to XML and HTML4 parsing rules and require manually setting the ENT_HTML5 flag on every invocation (for example, HTML5 redefined two of HTML4โs character references), but are still wrong in many cases.
Luckily you shouldnโt need to know about or call the new decoder, developed in Core-61072. It fits into get_modified_text(), further improving the HTML APIโs implementation without requiring you to change any of your existing code. With WordPress 6.6 your existing code becomes more reliable for free.
One part of this change you might want to know about is WP_HTML_Decoder::attribute_starts_with(). This new method takes a plaintext prefix and a raw attribute value and indicates if the decoded value starts with the given prefix. This can be invaluable for efficiently detecting strings at the start of an attribute, as some attributes can be extremely large, and if not careful, naive parsers can overlook content hidden behind long slides of zeros.
In the case of extremely long attribute values (for example, when pasting content from cloud document editors which send images as data URIs), the attribute_starts_with() can avoid megabytes of memory overhead and return much quicker than when calling functions which entirely decode the attribute value.
The new text decoder will mostly help ensure that the HTML API remains safe and reliable. There are complicated rules in parsing HTML, so as always, itโs best to leave the low-level work to the HTML API, preferring to call functions like get_attribute() and get_modified_text() directly instead of parsing raw text segments.
An idealized view of an HTML document.
The Tag Processor was initially designed to jump from 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.) to tag, then it was refactored to allow scanning every kind of syntax token in an HTML document. Likewise, the HTML Processor was initially designed to jump from tag to tag, all the while also acknowledging the complex HTML parsing rules. These rules largely exist in the form of a stack machine that tracks which elements are currently open. While the HTML Processor has always maintained this stack, it has never exposed it to calling code.
In WordPress 6.6 the HTML Processor underwent a major internal refactor to report those stack events (when an element opens and when an element closes) rather than when it finds raw text that represents things like tag openers and tag closers. This is a really big change for calling code! Previously, the HTML Processor would track all elements, but only return when a tag or token appeared in an HTML document. For instance, it always knew that <p><p> represents two sibling P elements, but it only presented each opening P tag to calling code. Now, the HTML processor is going to present not only the tags and tokens that exist in the raw HTML text, but also the โvirtual nodesโ that are implied but not textually present.
Letโs compare the output in WordPress 6.5 against the output in WordPress 6.6.
HTML Processor in WordPress 6.5
H1:
#text: One
/H3:
H2:
#text: Two
P:
#text: Three
P:
#text: Four
H3:
#text: Five
HTML Processor in WordPress 6.6
3: H1:
4: #text: One
2: /H1:
3: H2:
4: #text: Two
4: P:
5: #text: Three
4: /P:
4: P:
5: #text: Four
3: /P:
3: /H2:
3: H3:
4: #text: Five
0: /H3:
With the HTML API in WordPress 6.6, itโs possible to treat an HTML document in the idealized way we often think about it: where every tag has an appropriate corresponding closing tag in the right place, and no tags overlap. In WordPress 6.5, only the opening tags which appeared in the document return from next_tag(), and the </h3> closing tag appears as an H3 closing tag, even though the HTML specification indicates that it closes the already-open H1 element. In WordPress 6.6, every opening tag gets its closer, and the </h3> appears as if it were an </h1>. This is because the HTML Processor is exposing the document structure instead of the raw text.
Two new methods make working with HTML even easier:
WP_HTML_Processor->get_current_depth() returns the depth into the HTML structure where the current node is found.
WP_HTML_Processor->expects_closer() indicates if the opened node expects a closing tag or if it will close automatically when proceeding to the next token in the document. For example, text nodes and HTML comments and void elements never expect a closer.
With the help of these methods itโs possible to trivially detect when an element opens and closes, because the HTML Processor guarantees a โperfectโ view of the structure.
$processor = WP_HTML_Processor( $block_html );
if ( ! $processor->next_tag( 'DIV' ) ) {
return $block_html;
}
$depth = $processor->get_current_depth();
while ( $processor->get_current_depth() >= $depth && $processor->next_token() ) {
// Everything inside of here is inside the open DIV.
}
if ( ! isset( $processor->get_last_error() ) ) {
// This is where the DIV closed.
}
An optimized class for looking up string tokens and their associated mappings.
As part of the text decoder work the WP_Token_Map was introduced. This is a handy and efficient utility class for mapping between keys or tokens and their replacements. Itโs also handy for efficient set membership; for example, to determine if a given username is found within a set of known usernames.
The HTML Processor will now return the depth of the current node in the stack of open elements with get_current_depth(). [58191]
The HTML Processor now includes expects_closer() to indicate the currently-matched node expect a closing token. For example, no HTML void element expects a closer, no text node expects a closer, and none of the elements treated specially in the HTML API as atomic elements (such as SCRIPT, STYLE, TITLE, or TEXTAREA) expect a closer. [58192]
The WP_HTML_Decoder class can take a raw HTML attribute or text value and decode it, assuming that the source and destination are UTF-8. The HTML API now uses this instead of html_entity_decode() for more reliable parsing of HTML text content. [58281]
The HTML Processor now visits all real and virtual nodes, not only those which are also present in the text of the HTML, but those which are implied by whatโs there or not there. [58304]
Bug Fixes
Funky-comments whose contents are only a single character are now properly recognized. Previously the parser would get off track in these situations, consuming text until the next > after the funky comment. [58040]
The HTML Processor now respects the class_name argument if passed to next_tag(). Formerly it was overlooking this constraint. [58190]
The Tag Processor was incorrectly tracking the position of the last character in some tokens, internally and when bookmarking. While this 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. did not affect the operation of the Tag Processor, it has been fixed so that future code which might rely upon it will work properly. [58233]
When subclassing WP_HTML_Processor the ::create_fragment() method will return the subclass instance instead of a WP_HTML_Processor instance. [58365]