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.5 was scheduled for release on March 26, 2024, however, the release has now been rescheduled for April 2, 2024. Thanks to everyone involved in the related discussions around delaying the release by one week. You can read more in this post.
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.5
There was a lot of activity in the #core channel today with everyone coordinating efforts around 6.5. There is a good summary of the conversations from @desrosjon Slack here.
Please continue to test the 6.5 release. See this list of key features to test, which was published alongside WP 6.5 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. 3.
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.1
Gutenberg 18.0 was released on March 27 and included these issues. The next Gutenberg release will be 18.1, scheduled for release on April 10.
Discussion
We discussed the upcoming 6.5 RC4 scheduled for March 28, and we seem to be in really good shape. The following contributors are lined up to help:
We revisited plans for the 6.6 release squad. @priethor has a drafted post ready to publish with further details, however we have delayed the call for volunteers whilst decisions were still being made around 6.5. Now that we are in a good place for 6.5, @priethor suggested that we consider posting the call for volunteers after the 6.5 RC4 release party. Please leave a comment with your thoughts.
@jorbin shared that we’re still looking for a Gutenberg maintainer to help out with the 6.5 maintenance releases, but otherwise, we have all the pieces we need. The current release squad members are always welcome to help (but also understand that they may need a break). @jorbin also confirmed that the date for 6.5.1 is still being decided, but will avoid upcoming holidays where possible.
Please leave a comment if you’re interested in being part of the 6.5 maintenance releases. There are more details in the handbook about what’s involved in being part of a release squad.
Highlighted posts
The full list of posts from the last week in CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. can be read on the agenda at this link.
Open floor
During the open floor, Shariar Mahmud Prince requested help with an issue with the meta box docs, and @marybaum helped open a docs issue.
@joemcgill mentioned that the past several weeks have been intentionally focused on any discussion around WordPress 6.5, but we will soon have the bandwidth to discuss other topics and it would be great for those topics to be proposed by the attendees. Discussion topics can always be proposed in the comments of the agendas themselves, but @joemcgill and @mikachan would like to start to get a bit of a backlog of ideas to prioritize. We can do a call for topics posts, but would be happy to take any suggestions you have in the meantime.
How can we get PHP8 support completed and out of “compatible with exceptions”
Aligning the coding standards for Core and Gutenberg so that both can use the same tooling
Tony Gravagno asked about improving the marketing around each WordPress release, especially about the release teams, and how people contribute to this huge effort in multiple cycles per year. @desrosj mentioned that there is a related ticket here, and @marybaum suggested that this fits well with the Marketing team’s new direction.
The release of WordPress 6.5 will be delayed one week and is now scheduled for release on Tuesday, April 2nd, 2024.
The delay is to accommodate the following:
The directory for font storage will be changed to wp-content/uploads/fonts.
The Editor team will work on including fixes for a select few high impact bugs that have been identified with the Font Library feature in the upcoming 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/ 18.0.0 release. This ensures they will receive some testing before being considered for merge into trunk prior to WordPress 6.5 RC4.
An unplanned WordPress 6.5 RC4 is now scheduled for release on 28 March 2024 at 16:00 UTC with the updated font storage location and any other related bugs deemed critical to the release. This will be a normal 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)., with the announcement being published on the WordPress.orgWordPress.orgThe community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ News blogblog(versus network, site) for extra reach.
The 1 week delay allows for ample time for testing, acknowledging that Thursday-Monday is a major holiday for parts of the globe.
Why the change?
This approach ensures that the greatest number of sites possible can benefit from the new Font Library feature without the need to install or configure anything.
While attempting to implement the originally suggested compromise, the sentiment from the trusted contributors involved was that a solution could not be shipped with a level of confidence that meets the standards that core contributorsCore ContributorsCore contributors are those who have worked on a release of WordPress, by creating the functions or finding and patching bugs. These contributions are done through Trac. https://core.trac.wordpress.org. hold themselves to in the remaining time before the originally scheduled release.
After evaluating the potential options and discussing the proposed solution, the most risk averse option was determined to be storing fonts in the wp-content/uploads/fonts directory.
Shipping a feature that requires additional configuration or technical knowledge isn’t in line with the guiding philosophies that have helped the project mature into the successful project that exists today. Part of the original post was a call to return back to those project philosophies, and something this change attempts to adhere to.
The Dry run post will be updated to reflect the schedule for the new release date of 2 April.
Post release
Following the 6.5 release, these items detailed in the original post should still be explored:
A roadmap will be published outlining where the project components are headed in relation to establishing new first-class concepts outside of previously established paradigms within the software (like breaking down themes into fonts, patterns, templates, etc.). Why was this such an important and impactful decision? What is the goal we are trying to accomplish? And how might it present itself again in the future?
A means to move the canonical location of the fonts directory. Should the wp-content directory become writable for a site, a safe path forward should be offered for its owners.
The Dry Run is a key event as a final walk-through for the final release. As noted above, this is scheduled on April 1, 2024 in the #core Slack channel.
What happens usually during the dry run?
Bug reports are reviewed to determine if any are critical to warrant another 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). (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).).
Checks and any necessary updates are made in the src/wp-adminadmin(and super admin)/includes/update-core.php file.
Pre-release scripts are run to ensure test suites, coding standards, and other automated checks pass.
If the results are acceptable, the release will go into a 24-hour code freeze period.
24-Hour Code Freeze
After the dry run and before the release party starts, a mandatory 24-hour code freeze goes into effect.
What does this mean? No source code for 6.5.0 (i.e., in the 6.5 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".) can be changed during these 24 hours.
What happens if a critical 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. is reported during this period? The release squad will meet with committers and maintainers to determine if the issue is a blockerblockerA bug which is so severe that it blocks a release..
If yes, another RC release happens, and the release process restarts (meaning the dry run is repeated, and then the 24-hour code freeze clock restarts).
Please note releasing a major version requires more time than releasing a 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. or release candidate. There are more steps in the process. If any last-minute issues need addressing, more time will be needed.
How You Can Help
A key part of the release process is checking that the ZIP packages work on all the available server configurations. If you have some of the less commonly used servers available for testing (IIS, in particular), that would be super helpful. Servers running older versions of PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher and MySQLMySQLMySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com/. will also need testing.
You can start this early by running the WordPress 6.5 RC4 packages, which are built using the same method as the final packages.
During the release party, options will be provided on how to help test the release package.
Tips on What to Test
In particular, testing the following types of installs and updates would be much appreciated:
Does a new WordPress install work correctly? This includes running through the manual install process, as well as WP-CLIWP-CLIWP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/https://make.wordpress.org/cli/ or one-click installers.
Test upgrading from 4.0.38, 4.9.22, 5.8.6, 5.9.5, 6.0.3, 6.2.2, 6.3.0, 6.4.0, 6.4.1, 6.4.2 and 6.5 RC3, as well as any other versions possible.
Remove the wp-config.php file and test a fresh install.
Test single site and 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/networknetwork(versus site, blog) (both subdirectory and subdomain) installations.
Testing the following user flows on both desktop and mobile would be great to validate each function as expected:
Publish a post, including a variety of different blocks.
Comment on the post.
Install a new 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, or upgrade an existing one.
Change the site language.
If you’re a plugin developer, or if there are complex plugins you depend upon, test that they’re working correctly.
This post has been superseded by the post WordPress 6.5 release delayed 1 week, in which it’s announced fonts will be uploaded to the fonts sub-directory of the uploads folder.
The Font Library, a new feature of WordPress 6.5, will allow users of 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 themes to upload and customize their site’s fonts. You can learn about the full set of Font Library features in the #dev-note.
As fonts are a new first-class object, there has been some discussion around where to store the associated files while accounting for different file systems used by WordPress sites. The particular challenge has been for file systems that do not allow for the writing of files outside the uploads directory (See Gutenberg#59417 and Gutenberg#59699).
To account for such file systems, it was originally decided to natively fallback to the uploads directory natively in WordPress CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress..
Revised approach to font file storage
Exploratory work on supporting a fallback directory natively has demonstrated that this approach would lead to a high risk of bugs. Therefore, the original decision is being modified and the new approach will be:
WordPress Core will by default only attempt to store font files in the wp-content/fonts directory,
For file systems unable to write to or persistently store files in the new directory it is recommended to install the 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-partyFonts to Uploads to store the files in the under existing uploads directory, in wp-content/uploads/fonts
Developers wishing to modify the directory without using a plugin can use the font_dirfilterFilterFilters 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.documented in the announcement post.
Props @mmaattiiaass and other contributors for working on the exploratory pull request.
WordPress 6.5 RC 3 was released on March 19, 2024, and Gutenberg 17.9 was released on March 13. Please continue to help test and provide feedback.
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.5
We are in the final week before WordPress 6.5 is scheduled to be released, with a Dry Run scheduled for next Monday, March 25, and the release scheduled for Tuesday, March 26.
Please continue to test the 6.5 release. See this list of key features to test, which was published alongside WP 6.5 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. 3.
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.0
Gutenberg 18.0 is scheduled for release on March 27 and will include these issues.
Discussion
Given that this was the last dev chat before the 6.5 release, we concentrated on discussing any final decisions, blockers, etc.
@swissspidy suggested starting with the Font Library:
From what we’ve seen so far, it seems that adding such a fallback logic appears to be more complex than originally anticipated and that it’s not feasible to land this in time for 6.5. Adding a silent fourth 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). solely for that would be too risky. So for 6.5 we might want to consider: 1. Leave the current situation as-is (fonts go to `wp-content/fonts`, no fallback) 2. Point people to plugins such as Fonts to Uploads and the dev-note explaining how to change the upload location. 3. Re-evaluate fallback logic for 6.5.1 or 6.6 if needed, also considering potential folders in the future (patterns, templates, AI models, etc.)
We discussed how the fallback logic is proving to be more complicated than expected and will present a future maintenance burden and potential for bugs that aren’t worth the risk of rushing to land a fix. We mentioned alternative options, including delaying the release and removing the Font Library.
The suggestion from release leads and people familiar with the latest state of the Font Library was that it is in a good enough shape to include, and that the difficulty is in the implementation of the potential automatic fallback and not in implementing the feature itself. Therefore, the plan following the conversation was that the feature will be shipped without the fallback logic in place.
Based on this, the following actions should be taken:
A post on make/coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. to communicate the decision — @peterwilsoncc offered to start on a draft
Update the docs with a pointer to the 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 — @flexseth offered to help update docs (@mikachan also happy to help here)
Update https://wordpress.org/plugins/fonts-to-uploads/ to a Canonical plugin with maintenance by WP Contributors/WP.org with source moved under the WP org on 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 be the repository owner. https://github.com/ so that it’s a shared responsibility
Once the post outlining the decision to change to the the fallback directory behavior is posted, we should inform #forums, along with a request from them to be on the lookout for issues with the lack of a default Font Library fallback — @jorbin offered to help with this
Will we have an extra RC, since there are some unresolved Font Library tasks?
There is currently no extra RC release planned
When discussing whether we needed another RC, the suggestion was to release an RC for any necessary Font Library changes (or any additional needed code changes) later this week, while the $_old_files change and theme bumps are handled during the Dry Run without publishing an extra RC.
@joemcgill closed the chat by suggesting that if the purpose of an RC is to allow time for more testing, to not make it silent, and encourage the release leads to finalize a plan. Coordination about an extra RC continued following the meeting in the release leads channel.
This guide outlines major developer features and breaking changes in 6.5 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.
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/ included in this release has 373 enhancements, 515 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 65 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.
Changes in 6.5 are spread across 40 Core components. Below is the breakdown of the most important ones.
Table of contents
Principal Changes
Minimum System Requirement
The minimum version of MySQLMySQLMySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com/. has been raised from v5.0 to v5.5.5. (#60036)
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
A new attribute $variation_callback has been introduced in WP_Block_Type. This limits the ability to modify variations by reference directly as was done previously.
WordPress 6.5 brings 10 Gutenberg releases into core – 16.8, 16.9, 17.0, 17.1, 17.2, 17.3, 17.4, 17.5, 17.6, and 17.7. You will find new features, APIs, and various improvements. Highlights include 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., Font Library, and Block Bindings API.
The Interactivity API gives you a simplified and standardized way of building interactive front-end experiences with Blocks while offering optimal performance. Previously, this can only be done with third-party libraries. You may use it in scenarios such as fetching search results instantly or letting visitors interact with content in real time.
The Block Bindings API gives you the ability to link Core Block attributes to the values of Custom Fields without needing to create custom Blocks. You can extend this capability further to connect Blocks to any dynamic content.
HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. API
WordPress 6.5 brings significant updates to the HTML API. The 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.) processer has received a major overhaul and a further amount of the HTML specification is now supported. If you have been sub-classing WP_HTML_Tag_Processor, there are some specific changes you should pay attention to.
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.
The Performant Translations feature plugin has been merged into Core. The new translation system is much faster and uses less memory with the new .l10n.php format; it also continues to support all three existing translationtranslationThe process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. formats: .l10n.php, .mo, and .po files. Two new filters translation_file_format and load_translation_file are introduced.
AVIF support comes to 6.5. AVIF is a modern image format that can be up to 50% smaller than JPEGs while maintaining the same image quality. You can now upload/edit/resize/save AVIF images if supported by your hosting environment. The way you operate on AVIF images remains the same as with other existing image formats. If you run 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, there is a FAQ just for you.
The Script Modules API brings native 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/. Module support to 6.5 and provides two modules for use with the WordPress Interactivity API.
It is strongly recommended that developers currently utilizing JavaScript modules in their extensions migrate to the Script Modules API.
A 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’s dependencies can be declared by using a new Requires Plugins headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. in the dependent plugin’s main file. The header must contain a comma-separated list of WordPress.orgWordPress.orgThe community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/-formatted slugs.
Example:
/** * Plugin Name: Bridge for Foo and Bar * Requires Plugins: foo, bar */
Dependency slug conditions:
Dependent plugins hosted on WordPress.org can only declare dependencies that are also hosted on WordPress.org.
Dependent plugins not hosted on WordPress.org can declare dependencies whether hosted on WordPress.org or elsewhere.
Declaring a plugin dependency places the following requirements:
Requirements on dependent plugins:
Cannot be installed until its dependencies are installed.
Cannot be activated until its dependencies are activated.
Requirements on dependency plugins:
Cannot be deactivated while its dependents are activated.
Cannot be deleted while its dependents are installed.
The following features are not currently supported:
Version management
Must-Use plugins as dependencies
Themes that require plugins
Automatic deactivation of dependent plugins
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.wp_plugin_dependencies_slug has been introduced to allow for alterations to dependency slugs.
A new class WP_Plugin_Dependencies has been introduced with public API methods available.
The UIUIUser interface of the plugin row the plugin row has been changed to reflect a plugin’s dependencies/dependents. The UI of dependent plugin cards has been changed to reflect its dependencies, with modal links to install and activate them first.
Automatic redirection from Plugins > Add New is no longer performed upon activation of a plugin.
Props to @cosdev for review.
Additional Changes
External Libraries
The following libraries were updated to the latest versions:
wordpress/scripts version 17 has dropped official support for unmaintained Node.js versions. The oldest supported Node.js version is now Node.js 18. (Misc Editor Dev Changes)
Classic themes can now opt in to appearance tools support. (#60118)
Media
Control of jpeg progressive image output has been enabled. A new image_save_progressive filter has been added, which controls whether intermediate image sizes are saved in a progressive format (when available). By default, progressive image output is disabled, matching the current behavior. (#21668)
Permalinks
Caddy web server: support pretty permalinks when Caddy web server is detected. (#41877)
Rest APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/.
A featured_media field for featured imageFeatured imageA featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. (also known as a poster image) has been added to the REST API wp/v2/media attachments endpoint. (#41692)
Site Health
Site ID has been included in the debug data on multisite installations. (#60081)
Upgrade/Install
During bulk upgrades, a theme upgrade is now checked for satisfying the minimum WordPress version or the server PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version. This was previously done for plugins, but not themes. (#59758)
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.
Introduced in WordPress 6.5, the Font Library allows users to manage fonts directly in the editor. It comes with a set of APIs that allow developers to control, adapt, and disable its behavior.
Font Collections
A Font Collection is a list of font family definitions that can be installed by the user via the editor. The font family definition is a fontFamily item in theme.json format. By default, WordPress 6.5 allows users to opt-in to a collection listing for Google Fonts. To allow sites to remain GDPR compliant, installing a Google Font downloads the file to the WordPress server.
When a Font Collection is registered, it will appear in the Font Library UIUIUser interface in the editor. From here, users can install and activate fonts from the collection.
Adding a Font Collection
A new Font Collection can be added using the wp_register_font_collection() function. This can be done by supplying a list of font families and their font faces in either PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher or 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. format as part of the Font Collection array.
Here is an example of adding a Font Collection in PHP:
Please note that the name and description fields of the Font Collection array must be translatable, which can be achieved by wrapping the strings in the _x() function. Font Family names are not typically translated. For more information and background discussion, see #60509.
JSON format for the font_families field can be a local path or a remote URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org that points to the JSON file.
Removing a Font Collection
A Font Collection can be disabled by using the wp_unregister_font_collection() function. Here is an example which disables the default font collection:
Fonts definitions are based on the theme.json format for font settings. “Installing” a font to the site saves the theme.json formatted settings from the collection into the database, so the font can be activated for any theme.
When the font is “activated,” the Global Styles settings for the theme are updated so that the font is included, along with the fonts defined by the theme, and can be used in the typography settings for Global Styles and individual blocks.
When switching to a new theme, installed fonts need to be re-activated, to update the site’s Global Styles settings for that theme. If Global Styles for a theme are reset, this will deactivate all installed fonts, but they will remain installed on the site and can be reactivated as desired.
Additionally, the Font Library can be used to deactivate fonts included with the theme, if they aren’t needed, to improve the loading performance of the site.
Customizing the Fonts Upload Directory
Please note that some of the following details, such as function names, may change prior to the 6.5 release. For more information, see #60751 and 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/ issue #59699.
By default, fonts will be uploaded to the wp-content/fonts directory. However, this location can be customized as required using the font_dirfilterFilterFilters 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 installations that don’t support modification of the wp-content directory, it is recommended to install the Fonts To Uploads plugin or use the code snippet below.
It is possible to return the location of the fonts upload directory by using wp_get_font_dir().
The example below changes the fonts directory to the WordPress “Uploads” directory (by default, this is wp-content/uploads):
$fonts_dir = $uploads_basedir . '/fonts'; // Generate the URL for the fonts directory from the font dir. $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
When modifying the upload location, it is important to ensure that the chosen location exists and has appropriate read/write permissions set.
Like the wp-content/uploads directory, the fonts upload directory will not adhere to wp_is_file_mod_allowed / DISALLOW_FILE_MODS to prevent font uploads.
Disable the REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/.
The register_post_type_args() filter can be used to disable the wp_font_family and wp_font_face REST API endpoints:
The rest_endpoints filter can be used to disable the font collections 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. endpoints:
function my_disable_font_collections_rest_api_endpoints( $endpoints ) { foreach ( $endpoints as $route => $endpoint ){ if ( str_starts_with( $route, '/wp/v2/font-collections' ) ) { unset( $endpoints[ $route ] ); } }
For detailed documentation about each of the new endpoints, please refer to the REST API Handbook and #57616.
Props and a massive thank you to everyone who helped put this 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. together:@mmaattiiaass, @grantmkin, @peterwilsoncc, @youknowriad, @get_dave, @stevenlinx, @leonnugraha.
Update: This dev-note has been modified following a late decision to modify how font files were stored. Please refer to this follow up post on the subject of font file storage.
Update: This dev-note has been modified to update the code examples in the “Disable the REST API” section, as the previous example included the use of unregister_post_type(), which does not work on built-in post types. Please update any references to the previous example.
WordPress 6.5 RC 2 was released yesterday, March 12, 2024 and Gutenberg 17.9 was released earlier today. Please continue to help test and provide feedback.
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.5
We are in the final weeks before WordPress 6.5 is scheduled to be released, with our final scheduled 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). 3) scheduled for next week.
There are several important changes to our normal development process during the RC stage. For more, see this post: WordPress 6.5 Release Candidate Phase.
Please continue to test the 6.5 release. See this list of key features to test, which was published alongside WP 6.5 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. 3.
@marybaum confirmed the release team for RC3 on Tuesday, March 19, 2024. @audrasjb as the 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., with @hellofromtonya on backup and @davidbaumwald as mcpilot; @akshaya will host with @priethor as backup.
@swissspidy also shared that RC3 is the last scheduled RC before the stable release. The topmost priority should be solving the Font Library uploads location as per Josepha’s recent blog post. If you would like to help, there is an open architecture discussion where you can get involved, and a couple of remaining related PRs:
Primarily, we need to find a robust way to ensure that, when deleting a font, the font files are deleted from the right folder. If we don’t have a solution for the above by RC3 we could consider an additional fourth RC.
There are also some open Interactivity API bugs and editor bugs, but nothing severe. It would be helpful if these issues had owners. @joemcgill suggested scheduling another 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. scrub this week to review these issues and assign owners.
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.0
Gutenberg 18.0 is scheduled for release on March 27 and will include these issues.
Discussion
The discussion today started with organizing release squads for 6.5.x and 6.6 releases.
@jorbin confirmed that we’re still looking for folks to be involved in the 6.5.x maintenance releases. Please reach out if you’re available to help with these releases – particularly if you were already involved in the 6.5 releases (but that’s not a requirement).
@priethor has a draft for a post that identifies people who have raised their hands for 6.6.
A related discussion topic is whether we should reevaluate the size of release squads prior to 6.6. This came out of the discussion following the 6.5 release squad announcement (context). There was a discussion around the pros and cons of having larger release squads, including:
Larger squads spread the responsibility that used to be focused on just one person to a bigger team. However;
It doesn’t feel like there is much need for others to help or be involved when there are so many people responsible for a release.
The more individuals, the greater number of relationships and opportunities for both cliques and interpersonal conflictconflictA conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved..
It sometimes leaves the team not knowing who should be making key decisions about features.
There were also suggestions for better documenting the responsibilities both within the release squad and within a lead group. Also, having feature leads would be helpful, i.e. folks spearheading and owning a specific big feature in a release.
@joemcgill suggested that we could review the release squad size as part of a debrief post for 6.5, and @priethor is working on a proposal for a reduced release squad that will be published in the upcoming days.
Highlighted posts
The full list of posts from the last week in CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. can be read on the agenda at this link.
The live meeting will focus on the discussion of proposals and releases, updates on 6.5, 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.5 RC 2 was released on March 12, 2024. Thanks to everyone involved and those who helped test.
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.5
Updates from the release squad can be shared in the Dev Chat.
Please continue to test the 6.5 release. See this list of key features to test, which was published alongside WP 6.5 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. 3.
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.0
Gutenberg 18.0 is scheduled for release on March 27 and will include these issues.
Discussions
This week the discussion will focus on any priority topics that need to be raised before the next 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). for WordPress 6.5.
Proposed topics
Are there any priority topics needed for discussion ahead of WordPress 6.5 RC 3?
Update on A Call for 6.6 release squad
Should we reduce the number of leads on a release squad?
Feel free to suggest additional topics related to this release in the comments.
CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Editor Updates
Color and typography presets that are defined in theme variations are now exposed within the color and typography sections of Global Styles.
List 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. items can now be indented using the tab key.
Users can now shuffle between random patterns via the block toolbar when inserting a pattern.
Tickets for 6.5 will be prioritized. Please include detail of tickets / PR and the links into comments, and if you intend to be available during the meeting if there are any questions or will be async.
In this post, you will find 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. for smaller changes to the editor in WordPress 6.5.
New 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. Supports
Background image block support additional features for size, repeat, and position
In WordPress 6.5, the background image block support receives new controls related to the size of the background image: size, repeat, and position.
For blocks that use the background image block support (currently, the Group block is the only coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. block to use this support), these optional controls can now be displayed. They are hidden by default behind the tools panel menu in the Background controls on the inspector sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme..
How to add backgroundSize support to a theme
There are two ways to add support for backgroundSize and the related size, as well as repeat and position control to a block theme. The simplest one is to opt into the appearanceTools setting, which automatically enables a number of design tools (read more in the developer handbook).
For themes that wish to have more granular control over which UIUIUser interface tools are enabled, the backgroundSize support can be opted into by setting settings.background.backgroundSize to true in theme.json. For example:
Note that as of WordPress 6.4 and WordPress 6.5, the backgroundImage, backgroundSize, and related supports are only available at the individual block level, not in global styles or at the site root. These features will be explored in subsequent releases, with progress tracked in 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 be the repository owner. https://github.com/ issue: #54336.
Props to @andrewserongfor writing the 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..
Aspect ratio block support
A new aspect ratio block support has been added in WordPress 6.5, with the Cover block opted-in by default. For themes using the appearanceTools feature in theme.json, the control will be available in the inspector controls under Dimensions.
The feature allows users to set an aspect ratio for the Cover block, and is mutually exclusive with min-height rules. If an aspect ratio is set, then min-height is unset to ensure that height rules do not conflictconflictA conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. with the aspect ratio. The aspect ratio rules will be output at render-time for the block via an inline style applied to the block’s wrapper.
Note that themes or blocks that add width or height rules to a block will need to take care in testing compatibility with aspect-ratio if they are to opt-in to aspect ratio support. The aspect ratio tends to work most flexibly when width or height rules are not set.
How to add aspectRatio support to a theme
There are two ways to add support for aspectRatio to a block theme. The simplest is to opt into the appearanceTools setting, which automatically enables a number of design tools (read more in the developer handbook).
For themes that wish to have more granular control over which UI tools are enabled, the aspectRatio support can be opted into by setting settings.dimensions.aspectRatio to true in theme.json. For example:
The Quote block has blockGap support in WordPress 6.5. It also changes the default spacing between the quote and the citation in block themes that have blockGap enabled, to be consistent with all other blocks that use the layout support. The default spacing will now use the layout spacing rules defined by a theme’s styles.spacing.blockGap value in theme.json.
For themes that use blockGap but wish to use a different gap between the quote and the citation, they can set a spacing.blockGap value for the block directly.
Add padding and margin support to the Pullquote block
Pullquote block now supports padding and margin. At the same time, the browser default margin applied to the blockquote element inside the block has been reset to zero to ensure that padding values are applied accurately inside the block. Depending on themes, this effect may result in visual changes and the need to adjust padding or margin.
In WordPress version 6.5, footnotes are now supported on any custom post typeCustom Post TypeWordPress can hold and display many different types of content. A single item of such a content is generally called a post, although post is also a specific post type. Custom Post Types gives your site the ability to have templated posts, to simplify the concept. that fulfills certain requirements. To be eligible for footnotes, a custom post type must have capabilities like rest APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/., custom fields, revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision., and editor support. If a post type meets these requirements, footnotes should be available by default without requiring any changes from the developer.
However, if a developer wants to remove footnotes support in a specific condition, for example, in a particular post type, they can use 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. like any other block. The following code sample demonstrates how we can remove footnotes support from the “post” post type:
Props to @jorgefilipecosta for writing the dev note.
DependencyExtractionWebpackPlugin: Drop webpack4 and node<18
As webpack4 doesn’t support modules that blocks require to work, and that webpack5 was released more than three years ago, the support for webpack4 is dropped in WordPress 6.5.
In addition, the support for Node.js version 17 or older is dropped, as Node.js 18 is currently the oldest maintained version.
@wordpress/scripts version 17 has dropped official support for unmaintained Node.js versions. The oldest supported Node.js version is now Node.js 18.
@wordpress/dependency-extraction-webpack-plugin version 5 has dropped official support for unmaintained Node.js versions. The oldest supported Node.js version is now Node.js 18.
@wordpress/dependency-extraction-webpack-plugin version 5 has dropped support for webpack versions less than 5. Users should either upgrade to webpack v5 or continue to use v4 of the 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. Version 4 will not be maintained going forward. If you’re using @wordpress/dependency-extraction-webpack-plugin via @wordpress/scripts, the webpack change should not affect you.
Stabilization of the block editor’s RecursionProvider API
Context
Originally implemented as an experimental hook named __experimentalUseNoRecursiveRenders in early 2021, then improved and repackaged in 2022 as the pair __experimentalRecursionProvider and __experimentalUseHasRecursion, the purpose of these APIs is to prevent certain advanced block types from accidentally triggering infinite rendering loops inside the block editor. For example, the Template block must guard against these loops:
If a user adds an instance of the Template block into the contents of that same template (linear recursion);
If Template A contains Template B, which then contains Template A (mutual recursion).
As of today, the following core block types use the RecursionProvider API:
core/block
core/navigation
core/post-content
core/template-part.
Changes with WordPress 6.5
The API has been promoted to stable, thereby shedding the __experimental prefix. Consumers should now use the API by importing RecursionProvider and useHasRecursion from @wordpress/block-editor, or via the WP global as wp.blockEditor.RecursionProvider and wp.blockEditor.useHasRecursion.
For more details and a working example, see the component’s README.md document.
Before
After
wp.blockEditor.__experimentalRecursionProvider
wp.blockEditorRecursionProvider
wp.blockEditor.__experimentalUseHasRecursion
wp.blockEditor.useHasRecursion
Backwards compatibility
The former identifiers — __experimentalRecursionProvider and __experimentalUseHasRecursion — are now deprecated. This means that they are still accessible, but their use will trigger a warning in the browser console.
WordPress 6.5 adds support for the new allowedBlocks field in the block.json file. It lets block developers specify which block types can be inserted as children of the given block. It’s a companion to the existing parent and ancestor fields that have a similar function, namely specifying allowed parent block types. Example of usage in a block.json file:
One of the main advantages of the block.json field is that it can be modified by plugins. For example, you can create a block that acts as a custom list item and extend the Core List block so that your custom block can be inserted as its child:
This new API replaces the allowedBlocks option that can be passed to the useInnerBlocksProps hook inside the block’s edit function. This option was previously used to implement the same check, but it wasn’t extensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software.: the list of allowed blocks was hardcoded in the block’s edit function and couldn’t be modified.
The allowedBlocks option on the useInnerBlocksProps hook is still supported and is not deprecated, but you should use it only for specialized use cases. Like when the list of allowed blocks is dynamically calculated for each block: from its attributes, or from its surrounding environment (the parent block etc.).
Introducing the block_core_navigation_listable_blocksfilterFilterFilters 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.
WordPress 6.5 introduces a new filter, block_core_navigation_listable_blocks which is designed to provide control over the accessible rendering of child blocks used within the Navigation block.
Historically, the Navigation block has conditionally wrapped particular blocks in <li> tags to ensure accessible markup on the front of the site.
With the introduction of the new allowedBlocks API, which technically allows any block to be added as valid children of the Navigation block, developers require a means to indicate which blocks need to be wrapped.
The block_core_navigation_listable_blocks filter allows developers to determine whether a specific block should be wrapped in an <li>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.), thereby aiding in adherence 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) standards and the creation of valid markup.
The example below shows the mycustomblock/icon block opting into being wrapped in an <li> tag:
Two new selectors have been introduced to Block Editor’s Core Data API to fetch revisions and single revisions for post types that support revisions, for example, posts and pages, templates, and global styles.
getRevisions( kind, name, recordKey, query ) – fetches a post’s revisions where recordKey is the id of the parent post.
getRevision(kind, name, recordKey, revisionKey, query) – fetches a single post revision, where revisionKey is the id of the individual revision.
The functions use similar arguments to existing core data entity functions, such as getEntityRecords with the addition of recordKey (post parent id) and revisionKey (single revision id).
Example usage:
// Returns a collection of revisions.
// `parentGlobalStylesId` is the id (int) of the parent post.
wp.data.select( 'core' ).getRevisions( 'root', 'globalStyles', parentGlobalStylesId, { per_page: -1 } );
// Paginated results.
// `parentId` is the id (int) of the parent post.
wp.data.select( 'core' ).getRevisions( 'postType', 'post', parentId, { per_page: 3, page: 2 } )
// Get a single revision object.
// `parentId` is the id (int) of the parent post.
// `revisionId` is the id (int) of the individual revision post.
wp.data.select( 'core' ).getRevision( 'postType', 'post', parentId, revisionId );
// Get a single revision with only the id, parent and date fields.
// `parentId` is the id (int) of the parent post.
// `revisionId` is the id (int) of the individual revision post.
wp.data.select( 'core' ).getRevision( 'postType', 'post', parentId, revisionId, { _fields: 'id,parent,date' } );
getRevisions and getRevision can also be used via useSelect in ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. components:
import { useSelect } from '@wordpress/data';
import { store as coreStore } from '@wordpress/core-data';
function MyComponent() {
const pageRevisions = useSelect(
( select ) =>
select( coreStore ).getRevisions( 'postType', 'page', pageId ),
[ pageId ]
);
// Do something with pageRevisions...
}
In the background, these selectors’ corresponding resolvers call revisions REST API endpoints.
New useSettings hook for reading block instance settings
When trying to improve the block editor’s performance for WordPress 6.5, one of the identified issues was related to the useSetting hook that is used by block instances to read various settings provided by the environment they are in: parent blocks, the theme, the block editor itself. It turns out that it’s inefficient to read multiple settings with separate useSetting calls:
That’s why WordPress 6.5 introduces this new hook. The useSetting (singular) hook is now deprecated (using it will trigger a console warning), because reading even a single setting is very easy with the useSettings (plural) hook:
The only change is that the useSettings hook always returns an array, and the array needs to be destructured to read the single value. Supporting two APIs for performing the same task is therefore not justified.
Introduction of the PluginPostExcerpt Slot Component
This update introduces a new PluginPostExcerpt slot component within 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. 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 for the extension of the Post 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. panel, allowing developers to customize this area for their needs.
What’s New?
The component enables the addition of custom content within the Post Excerpt panel. This is particularly useful for plugins looking to add extra functionality or information specific to their use case.
Usage
To utilize this new feature, developers can now insert their custom content into the Post Excerpt panel by creating a component that leverages the slot. This allows for a seamless integration of custom functionalities directly within the editor.
The following example shows adding custom content to the post excerpt panel.
Changes to the underlying Composite component implementation
WordPress 6.5 no longer includes the Reakit package, as it does not support React beyond v16. The __unstable*Composite component was built on this library, so it has been internally refactored.
What does this mean for consumers?
The primary API has not changed, and can still be imported with no changes. For typical usage patterns, there should be no differences, and in most cases, no action is required from consumers of the package.
However, composite state props must now be generated by the useCompositeState hook; they can no longer be provided by independent state logic. Composite state arguments have not changed, though, and will continue to work as before.
import {
__unstableComposite: Composite,
__unstableCompositeGroup: CompositeGroup,
__unstableCompositeItem: CompositeItem,
__unstableUseCompositeState: useCompositeState
} from '@wordpress/components';
const state = useCompositeState({ ... });
// ✅ This will continue to work
...( <Composite { ...state } /> );
// ⛔️ This will no longer work
...( <Composite { ...state } currentId={ ... } /> );
Consumers can continue to either spread the state or pass as a single state prop.
// ✅ Used by spreading the state
...(
<Composite { ...state }>
<CompositeGroup { ...state }>
<CompositeItem { ...state }>
{ ... }
</CompositeItem>
</CompositeGroup>
</Composite>
);
// ✅ Or with a single `state` prop
...(
<Composite state={ state }>
<CompositeGroup state={ state }>
<CompositeItem state={ state }>
{ ... }
</CompositeItem>
</CompositeGroup>
</Composite>
);
Because the shape of the returned composite state has changed, consumers can also now no longer destructure specific state props from useCompositeState.
// ✅ This will continue to work
const state = useCompositeState({ ... });
// ⛔️ This will no longer work
const { groups, items } = useCompositeState({ ... });
What’s next?
We anticipate a new stable Composite component to be released in WordPress 6.6, along with the deprecation of this unstable version.
The isPressed prop on the Button component implicitly sets aria-pressed, with no way to override it. But sometimes Button is used for roles other than button, such as option and checkbox, where aria-pressed is not appropriate, and workarounds are required to add the correct semantics.
In an effort to move away from custom props that have native HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. equivalents, and to allow greater flexibility in component usage, aria-pressed is now supported as a first-class prop, taking precedence over isPressed.
A number of UI components currently ship with styles that give them top and/or bottom margins. This can make it hard to reuse them in arbitrary layouts, where you want different amounts of gap or margin between components. To better suit modern layout needs, we are in the process of deprecating these outer margins
A few releases ago, we deprecated the outer margins on a number of components and introduced transitional props so consumers could opt into these new styles before they become the default:
AnglePickerControl: __nextHasNoMarginBottom
CustomGradientPicker: __nextHasNoMargin
FontSizePicker: __nextHasNoMarginBottom
GradientPicker: __nextHasNoMargin
In WordPress 6.5, these margin-free styles have become the default. Any use of these props can be safely removed.
CustomSelectControl used to have a hard-coded width, which was inconsistent with our other form components. In WordPress 6.1, we deprecated this unconstrained width, and introduced the transitional __nextUnconstrainedWidth prop so consumers could opt into these new styles before they become the default.
In WordPress 6.5, these unconstrained width styles have become the default. Any use of the __nextUnconstrainedWidth prop can be safely removed.
Remove deprecation warnings for __next36pxDefaultSize
A few releases ago, we introduced a __next36pxDefaultSize prop on several components, meant to coordiate the transition to a new default sizing scheme (36px height). Due to some changes in our design direction, we eventually dropped this prop in favor of the __next40pxDefaultSize prop (40px height), making all existing opt-ins to the __next36pxDefaultSize prop act as an opt-in to the 40px one.
After receiving developer feedback about this ahead of WordPress 6.5, we will no longer throw a deprecation warning for usages of the __next36pxDefaultSize prop, informing consumers of this change. Do note, however, that it will trigger the new 40px size rather than the 36px size, despite the prop name.
Remove unused buttonBehavior attribute from the Search block
The Search block had a buttonBehavior attribute, which was referenced internally to determine the display variations of the block. However, this attribute was removed because it could not be changed from the user interface, and the default value was always referenced.
With this change, this attribute will no longer be referenced even if it has been added manually.
Similar to the setting that allows disabling layout controls in WP 6.4, this allows only the content and wide size controls for a constrained layout to be disabled from 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. file, globally or at a per-block level.
To disable the control globally for all blocks, add the following in theme.json under settings.layout:
"allowCustomContentAndWideSize": false
To disable at the block level, add the following in theme.json under settings.blocks: