Nominations for Core Team Reps: 2026 Edition

This post kicks off the formal election process with a call for nominations for the 2026 CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Team Reps. For 2025, Francesca Marano (@francina), Jb Audras (@audrasjb) and Benjamin Zekavica (@benjamin_zekavica) have served as the elected Core Team Reps.

The Role

In the WordPress open-source project, each team has on average one or two representatives, abbreviated as reps.ย For the historians out there, the role go way back to 2012.

Historically with the Core team, the team repTeam Rep A Team Rep is a person who represents the Make WordPress team to the rest of the project, make sure issues are raised and addressed as needed, and coordinates cross-team efforts. duration was around a year, though some reps stuck around longer if there was a specific need.

Anyone who serves as a team rep is responsible for communicating on behalf of the Core team to the other contributor groups via weekly updates, as well as occasional cross-team chats. Reps are also consulted on Contributor DayContributor Day Contributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://2017.us.wordcamp.org/contributor-day/ https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/., where they help to find someone within the Core team who will be at an event who can lead a Core table.ย Full details on the Team Rep role can be found on the Team Update site.

It is not called team lead for a reason.ย  Itโ€™s an administrative role. While people elected as team reps will generally come from the pool of folks that people think of as experienced leaders, the team rep role is designed to change hands regularly.

This role has a time commitment of at least one or two hours a week.

The main tasks include:

How the election works

Please nominate people in the comments of this post. Self-nominations are welcome. The deadline is January 31, 2026 at 23:59 UTC. If there are fewer than 2 nominees who have accepted their nominations, the deadline will be extended.

Once the nomination period expires, a poll will be opened for voting. It will stay open for two weeks. The new reps will start their role in February 2026.

Disclaimer: if you are nominated, please donโ€™t feel like you have to agree to say yes. The election poll will only include the names of the people who have agreed to be nominated. So feel free to reply with a โ€œThank you, but no thank youโ€.

If you have any questions, please feel free to ask in the comments or speak to the current team reps. Finally, for reference, these are the 2020, 2021, 2022, 2023, 2024, 2025 nomination posts.

Thanks to @francina for reviewing this post.

#team-reps

Dropping support for PHP 7.2 and 7.3

Support for PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 7.2 and 7.3 will be dropped in WordPress 7.0, currently scheduled for release in April 2026. The minimum recommended version of PHP will remain at 8.3, but the new minimum supported version of PHP will be 7.4.0.

The minimum supported version of PHP was last raised in July 2024 to 7.2.24. Since then usage of PHP 7.2 and 7.3 has dropped below 4% of monitored WordPress installations.

Historically, the project has used 5% as the baseline usage percentage that a PHP version must fall below before it can be considered for a well-earned retirement. Now that usage of PHP 7.2 and 7.3 combined has fallen well below that, the process to increase the minimum supported PHP version can proceed.

The goal of increasing the minimum supported version of PHP is to ensure the long-term maintainability of WordPress. The benefits to increasing the minimum supported PHP version manifest over time across multiple areas, including the pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party and theme ecosystem, tooling and libraries for AI, the long-term perception of the WordPress project, developer relations, and eventually within the WordPress codebase itself, including its developer tooling and automated testing infrastructure.

Discussion around this minimum version bump can be found here on the Trac ticket.

What about PHP 8 and higher?

WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. is fully compatible with PHP 8.0 to 8.3 and is beta compatible with PHP 8.4 and 8.5.

A full breakdown of which PHP versions are compatible with each version of WordPress can be found in the WordPress Core Handbook..

What about security support?

Sites that are running PHP 7.2 or 7.3 will remain on the 6.9 branchbranch A 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". of WordPress once 7.0 is released. While only one branch officially receives security updates, fixes are backported down to WordPress 4.7 as a courtesy when possible.

What about the GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ plugin?

The minimum supported version of PHP will also be increased to 7.4 in the Gutenberg plugin.

Going forward

There are no plans to bump the minimum supported PHP version on a set schedule. The Core team will continue to monitor PHP version usage and work with the Hosting team to encourage users and hosting companies to upgrade their versions of PHP as swiftly as possible. The 5% usage threshold will continue to be used as the standard for the foreseeable future.

At the time of publishing, the PHP version usage is as follows:

  • 8.5: 0.23%
  • 8.4: 4.90%
  • 8.3: 16.74%
  • 8.2: 27.29%
  • 8.1: 15.39%
  • 8.0: 5.69%
  • 7.4: 22.20%
  • 7.3: 2.04%
  • 7.2: 1.81%

Update PHP today

If you need more information about PHP or how to update it,ย check out this support article that explains more, guides you through the process, and provides instructions for contacting your web hosting provider for assistance.

Props to all those that have contributed to this discussion recently. Thanks to @desrosj, @westonruter, and @jorbin for feedback and proof-reading this post.

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

WordPress 6.9 Release Retrospective

Congratulations to all who helped make WordPress 6.9 possible!

Now that the release cycle is complete, youโ€™re invited to reflect and share your thoughtsย on the release cycle, release processes, release squad, or whatever else is on your mind.ย Feedback loops are critical to learning what works and what doesnโ€™t so that the teams involved can iterate on the processes to improve for future releases.ย 

Everyone is welcome to submit feedback about the release using this form, even contributors who did not contribute directly to the release itself.

A member of the community that casually observes a release cycle will have very different thoughts and opinions than someone who was heavily involved on a weekly or daily basis. The more viewpoints and backgrounds represented within this feedback loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop. the better. So please take a moment toย complete the formย or leave public feedback in the comments below.

Please note: the survey is not anonymous, but anything submitted will be anonymized before being shared in a post summarizing the results. Your wordpress.orgWordPress.org The 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/ username is required just case the person processing the responses needs to reach out to you for further clarification.

The form and comments will be open until January 15, 2026. A follow-up post with the collected, anonymized results will be published shortly after.

Again, thank you for your contributions to 6.9 โ€œGene,โ€ and for taking the time to provide valuable feedback to help make future releases even better!

Props toย @amykamala, @desrosj for the peer review.

#6-9, #release-process, #retrospective

Real-time collaboration: Early user feedback

Real-time collaborationโ€”the ability for multiple users to edit the same post simultaneously, similar to Google Docsโ€”is being developed for WordPress 7.0, scheduled for release in 2026.ย Beginning in October 2025, WordPress VIP customers have had access to a betaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. version of real-time collaboration to begin stress-testing the experience across different environments and use cases, informing the work as early as possible. The beta has provided valuable insights into how real-time collaboration performs with production WordPress sites and real editorial workflows. The response has been enthusiastic, with several organizations already enabling the feature in production. If you havenโ€™t seen it already, hereโ€™s a demo of the feature in action.

About the research

This post summarizes feedback gathered from 45 beta participants between October and early December 2025. While the issues are being tracked individually under the [Type] Real Time Collaboration label, this summary centralizes the information for easier review and broader transparency. The insights come from:

  • Direct conversations with technical leads and editorial teams at participating organizations.
  • Recorded testing sessions and demonstrations.
  • Written feedback submitted through beta feedback channels.
  • Observations of production and staging deployments.

Participating organizations span industries including news and media, higher education, research institutions, and enterprise publishing; all are larger organizations with multi-person editorial teams.

Key insight: It just works with modern WordPress

The most consistent feedback: real-time collaboration works seamlessly when sites are built for modern WordPress. Organizations using the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor with native WordPress blocks and custom blocks developed using best practices reported smooth experiences with minimal issues.

One technical lead at a major research institution noted their team has invested in a deep understanding of GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ and, as a result, โ€œโ€ฆ have not run into any issues.โ€ Their editorial team described the feature as delivering โ€œan amazing workflow change,โ€ eliminating the frustration of kicking colleagues out of posts to make quick edits.

Multiple teams tested the limits by:

  • Adding dozens of blocks simultaneously.
  • Copying large amounts of existing content in parallel.
  • Having entire teams edit the same post together (one team specifically noted โ€œthis is so funโ€).

In these stress tests with native blocks and modern custom blocks, real-time collaboration held up remarkably well.

Other insights

The value of Notes

The newly released Notes feature generated significant enthusiasm.ย 

One communications team called it โ€œrevolutionary.โ€ Teams particularly value the ability to leave contextual feedback directly in the editor without disrupting the editorial flow.ย 

This feedback confirms that collaborative editing is a suite of tools that make it easier for you to create in WordPress from your very first keystroke, not a single feature.

Flexible workflows

Different organizations expressed distinct preferences for how collaboration should work within their editorial processes:

  • Some teams want flexibility: Publishers aggregating content from distributed teams appreciate the ability for multiple editors to work simultaneously across different sections of a post.
  • Others prefer predictability: Organizations with established โ€œcheck-in, check-outโ€ workflows expressed interest in mode controls that would allow them to programmatically determine editing permissions based on user roles and post status.ย 

One organization specifically noted their less technical users might feel โ€œuncomfortable with the shift to a fully collaborative environment, fearing they might step on each otherโ€™s toes.โ€

Teams want the ability to adapt the collaboration model to their existing editorial culture rather than completely restructuring workflows.

Attribution

Multiple organizations emphasized the need for better attribution tracking. Today, when a user saves a revision, you know they made all changes. With real-time collaboration, multiple users can make changes to the same version.

Contributors are working to address this feedback by adding โ€œcontributorโ€ metadata for versions. You can follow that work in this GitHub issue.

Where things go wrong

The most significant compatibility issues emerged with blocks storing data in post metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. rather than block attributes, particularly when that post meta isnโ€™t updated using modern methods.

Real-time collaboration works with any post meta that is registered with show_in_rest set to true. Metadata registered this way will participate in the data store that powers real-time collaboration. Legacy metaboxes update meta using other means.

This will be an important area to address for WordPress 7.0. PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party authors will want to know what work, if any, is required to ensure their code supports real-time collaboration.

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

The current beta does not meet the accessibility standards expected for WordPress. Providing functional affordances in a real-time environment is challenging, but it is a challenge to be met.

This is an area where help is needed from the Accessibility team. You can report any accessibility issues you encounter on this GitHub tracking issue.

Going forward

Experimental work in Gutenberg is tracked in a branch, and it is also being merged upstream to provide undo support and post meta syncing.

If you want to test the beta for real-time collaboration today, you can follow the instructions in this GitHub repository to set up an environment. You can test locally by editing content in two different browser windows.ย 

Stay tuned for broader dedicated calls for testing and more summaries like this. The aim now is to get everything into Gutenberg trunktrunk A 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. to make it easier for more testing in different environments.

If you have feedback or questions, please comment here. Issues can be added with the [Feature] Real-time Collaboration label on GitHub.ย 

Props to @annezazu for reviewing this post.

#collaboration, #phase-3

Planning for 7.0

With 6.9 out in the world, our collective attention has already turned to 7.0. Core contributorsCore Contributors Core 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., together with Matt and Mary, had a call to discuss ideas and projects. There was shared excitement about this release, even if itโ€™s just another number. This post acts as a gathering point for contributors to share what they are starting to work on and to find known areas they can contribute to. There will be another more tactical follow up with release schedule and responsibilities, this one is about the initial scope.

How to interact with this post

Please do not use this as a spot to request folks to work on features. GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the โ€˜pull requestโ€™ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ and TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. are the best places to share feedback, talk about impact, and advocate for issues.ย 

Please use this post to share what you are working on, including areas youโ€™d like to help with that may be listed here, as well as areas that you are working on that are not. Items with TBD indicate areas where contributors are needed so please comment below if youโ€™re keen to work on those pieces.

If you were planning to work in an area listed below and donโ€™t see your name, please be sure to comment as well and itโ€™ll be updated. Itโ€™s intentional that this post is meant to be a place to shore up who is working on what out in the open at this early stage.

Also note this is neither comprehensive nor yet a commitment that all of these things will be part of 7.0, since many are in early stages and may not make this release. Items marked with โœ… mean the work is already merged in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ or trunktrunk A 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..

Collaborationย 

The project is getting deeper into Phase 3: Collaboration. Notes was a highlight feature in WP6.9 and thereโ€™s several improvements already planned to make it even more powerful and resilient.

Real time collaboration

  • Link: GitHub issue
  • Key considerations:
    • Thereโ€™s been a lot of progress in defining the UIUI User interface and the diffing mechanics for reconciling changes. Itโ€™s in very good shape and needs to be reviewed and tested diligently, especially around compatibility with third-party blocks and plugins.
    • This feature has a stronger dependency on server support and infrastructure than usual WordPress features, so there needs to be a definition of whatโ€™s the baseline experience shipping in WordPress (for example, peer-to-peer with 1 or 2 connections) and how it can be augmented, either by WP.org, hosting providers, or plugins.
  • Contributors: @acicovic, @aduth, @alecgeatches, @czarate, @ingeniumed, @jsnajdr, @maxschmelingkc, @paulkevan, @shekharnwagh, @youknowriad

Notes i2

  • Link: GitHub issue
  • Key considerations:
    • Support partial selection inside blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. rich text fields.
    • A โ€œsuggestionsโ€ mode and interface that allows Notes to refer to specific content within a block and apply the suggestions.
    • Support for multi-block notes.
    • Add rich text support in the comments.
    • Develop a dashboard widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. for recent notes.
    • More notification options (responses, follow a note, mentions).
  • Contributors: @adamsilverstein, @jeffpaul, @mamadukaย 

Adminadmin (and super admin)

Improving screens across wp-admin

  • Link: TBD
  • Key considerations:
    • Explore CSS improvements that can modernize the look and feel. For example, consider making the โ€œmodernโ€ admin color scheme the default.
    • Admin bar and editor โ€œsite hubโ€ improvements. Make the W menu item filterable. Possibly start work as an experiment in Gutenberg.
    • Consider a โ€œThis time last yearโ€ widget for bloggers.
    • Bring grid layout customization to dashboard experience or other screens. (Possible widgets at the top of comments, etc).
  • Contributors: TBD, @fabiankaegy, @karmatosed, @mcsf

DataViews and DataForms iterations

  • Link: 7.0 iteration issue
  • Key considerations:
    • DataForms/QuickEdit/Document inspector design iterations.
    • Hierarchical post visualization.
    • Make DataViews screens extensibleExtensible This is the ability to add additional functionality to the code. Plugins extend the WordPress core software. in the site editor (templates, pages, etc).
  • Contributors: @oandregal

Design System

  • Link: GitHub issue
  • Key considerations:
    • Components are already being worked on in wordpress/ui.
    • โœ… Theming system with design tokens using wordpress/theme.
    • Start replacing key parts of the editor UI with improved components (tabs, flyout menus).
  • Contributors: @0mirka00, @aduth, @jsnajdr, @mciampini, @wildworks

Font library admin section

  • Link: Github issue
  • Key considerations:
    • โœ… Support for block themes.
    • Support for hybrid/classic themes.
  • Contributors: @youknowriad

RevisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.ย 

  • Link: GitHub issue
  • Key tasks:
    • Rethink the revisions interface to be more modern, intuitive, and work with blocks.
    • Show visual diffs.ย 
    • Bonus: potentially tie in with collaborative editing, suggestions, and undo management.
  • Contributors: @adamsilverstein

Customizable Keyboard Shortcuts

  • Link: Github issue
  • Key considerations:
    • Build with design system components.
  • Contributors: TBD

APIs

Abilities & Workflows APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

Upgrade to ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. 19

  • Link: Github issue
  • Key considerations:
    • Thereโ€™s a path for the block editor in the mobile apps that should remove this dependency blockerblocker A bug which is so severe that it blocks a release..
    • Ecosystem impact.
  • Contributors: @aduth @jsnajdr @mamaduka @ralucastnย @tyxla

Block API: Add validation levels

  • Links: Github issue with initial PRย 
  • Key considerations:
    • The scope of this issue is to drastically reduce the amount of times a user sees a โ€œthis block is brokenโ€ message.
    • Impact on block API.
  • Contributors: @matvebย @mcsf @youknowriad

Enforced iframed editor

  • Link: GitHub issue.
    • Backwards compatibility, extended testing.
    • โœ… MigrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. guide.
  • Contributors: @ellatrix, @wildworks

WP client AI API

  • Link: GitHub project
  • Key considerations:
    • An AI client and API for WordPress to communicate with any generative AI models of various capabilitiescapability Aย 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). using a uniform API.
    • Integration with Abilities API.
    • Strictly no providers included in coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress..
    • Decide nomenclature.
    • Ideally, the minimum PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version has to be bumped from PHP 7.2.
  • Contributors: @flixos90 @jason_the_adams

Creating blocks and patterns on the server

  • Link: GitHub issue
  • Key considerations:
    • Most of the tools for a pretty straightforward PHP-only representation of blocks and patterns, including bindings, are ready.
    • Declarative block attributes and form components.
    • Pattern creation and syntax that allows easy construction of blocks and bindings.
  • Contributors: @priethor, TBD

wordpress/build and routing (site editor)

  • Link: GitHub issue; Scripts issue
  • Key considerations.
    • Add extensibility to site editor routing.
    • Dependency on standalone font library.
    • Refactor the site editor to allow pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party authors to add their pages there.
    • โœ… Opinionated build tool for plugins.
    • Update Gutenberg โ€“ Core backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. flow.
  • Contributors: @youknowriadย 

Shortblocks

Block bindings iterations


A series of improvements were identified to simplify the navigation workflow and make the experience of managing menus more intuitive and straightforward.

Simpler navigation editing

Ability to customise โ€œmobileโ€ overlayย 

  • Link: GitHub issue
  • Key considerations:
    • Implemented as a template part.
    • Ability to customize when the overlay appears (breakpoint settings) just for navigation overlay.
  • Contributors: @get_dave, @jeryj

Customization

Over the past couple years weโ€™ve been iterating on a series of related systems with the hope of arriving at a more streamlined editing experience of composite blocks and design patterns. We have some solid directions sketched out that are looking promising.

Explore more intuitive page navigation in the site editor

  • Link: TBD
  • Key considerations:
    • Modify the title bar to display a pages dropdown instead of empty command palette. List the pages used in the primary menu with a link to โ€œbrowse all pagesโ€. Exploration.
    • Add next/previous page links in zoomed-out view, similar to a carousel. See a preview in a zoomed out state with arrows next to preview or title bar. Exploration.
  • Contributors: @ellatrix

Pattern Editing (aka ContentOnly)

Improve template management

Responsive editing mode

Block supports and design tools:ย ย 


Blocks

Keeping the momentum on adding new blocks and new block tools to expand the palette and expressiveness offered to theme builders and users. Thereโ€™s also some refinements to some fundamental aspects of blocks to make them more resilient and more consistent.

Group block attributes

  • Link: GitHub Issue
  • Key considerations:
    • Adding groups to InspectorControls (like BlockControls).
    • Add support for list representation to block API based on nav block work.
    • Implement content representation for media and rich text attributes. (Connected with contentOnly, bindings, and partially synced patterns work.)
  • Contributors: TBD

โœ… Cover block: video embeds

Modernize Code editor + Code block

Lazy load the Classic block

Leverage iAPI for instant search block & submit comments without full page refresh

Writing flow + drag and drop improvements

  • Link: GitHub issue
  • Key considerations:
    • Get to a place where the drag handle from the toolbar can be entirely removed due to improved drag and drop functionality.
    • Making multi selection work on touch devices.
    • Improvements to inline insertion and inline images.
  • Contributors: @ellatrix

โœ… Tabs blockย 

Release the Table of Contents blockย 

Playlist block

Slider block

Dialog block

โœ… Breadcrumb block

Add more dynamic URLs via block bindings to Buttons block and Image block

Icon block

  • Link: GitHub issue
  • Key considerations:
    • Ship with a default set made out of some wordpress/icons.
    • Allow extenders to register their own sets.
  • Contributors: @mcsf @welcher

Gallery block: add lightbox support with the ability to switch between images

Introduce heading levels as Heading block variations

Aim to stabilize grid block


Media

Client side media work

Media editor


Designers looking across all these projects: @fcoveram, @joen,ย @jameskoster, @mattmiklic.

#7-0, #phase-3

Adjacent Post Navigation Changes in WordPress 6.9 and Compatibility Issues

TL;DR

WordPress 6.9 introduced a fix for adjacent post navigation when posts have identical publication dates. While this resolved a long-standing bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority., it inadvertently caused infinite loops in some extensions that modify the get_adjacent_post() WHERE clause.

What Changed in WordPress 6.9

In WordPress 6.9 (Trac #8107), a bug fix landed where next/previous post navigation failed when multiple posts shared identical post_date values. This commonly occurred when bulk-publishing draft posts.

The Technical Change

The get_adjacent_post() functionโ€™s WHERE clause was modified to include ID-based comparison as a tiebreaker:

Before (WordPress 6.8 and earlier):

WHERE p.post_date > '2024-01-01 12:00:00' 
  AND p.post_type = 'post'

After (WordPress 6.9):

WHERE (
    p.post_date > '2024-01-01 12:00:00' 
    OR (
      p.post_date = '2024-01-01 12:00:00' 
      AND p.ID > 123
    )
  ) 
  AND p.post_type = 'post'

This ensures deterministic ordering when posts have identical dates, using the post ID as a secondary sort criterion.

Additionally, the ORDER BY clause was updated:

-- Before
ORDER BY p.post_date DESC 
LIMIT 1

-- After  
ORDER BY p.post_date DESC, 
         p.ID DESC 
LIMIT 1

The Problem: Infinite Loops in Some Themes/Plugins

As Trac ticket #64390 documents, some plugins and themes modify adjacent post navigation to change behavior. For example, WooCommerceโ€™s Storefront theme navigates between products instead of regular posts. These plugins use the get_{$adjacent}_post_where filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to replace the current postโ€™s date with a different postโ€™s date.

Hereโ€™s what was happening:

  1. PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. into get_previous_post_where filter.
  2. Plugin does string replacement: replaces $current_post->post_date with $target_product->post_date.
  3. Problem: The new WHERE clause structure includes the post date in TWO places (date comparison AND ID comparison).
  4. Simple string replacement modified the date comparison but left the ID comparison unchanged.
  5. Query returns the same post repeatedly โ†’ infinite loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop..

Real-World Example: Storefront Theme

The fix to the WooCommerce Storefront theme illustrates this issue. They had to add special handling for the ID comparison:

// Replace the post date (works as before)
$where = str_replace( $post->post_date, $new->post_date, $where );

// NEW: Also need to replace the ID comparison (WordPress 6.9+)
if ( strpos( $where, 'AND p.ID ' ) !== false ) {
    $search = sprintf( 'AND p.ID %s ', $this->previous ? '<' : '>' );
    $target = $search . $post->ID;
    $replace = $search . $new->ID;
    $where = str_replace( $target, $replace, $where );
}

For Plugin Developers: Detecting and Fixing the Issue

How to Detect If Your Plugin Is Affected

Your plugin is likely affected if it:

  1. Uses the get_{$adjacent}_post_where filter.
  2. Performs string replacement on post dates in the WHERE clause.
  3. Changes which post is considered โ€œadjacentโ€ (like navigating between custom post types instead).

To test if your plugin works correctly with WordPress 6.9:

  1. Create 3-4 posts with identical publication dates (bulk publish drafts).
  2. Navigate between them using your pluginโ€™s adjacent post functionality.
  3. Verify that navigation moves to different posts (not the same post repeatedly).
  4. Check for infinite loops or performance issues.

Quick Fix: Handle the ID Comparison

If youโ€™re doing date replacement in the WHERE clause, you also need to handle the ID comparison. There are numerous ways to tie a knot, but the following example is loosely inspired by Storefrontโ€™s recent fix.

add_filter( 'get_next_post_where', 'example_custom_adjacent_post_where', 10, 5 );
add_filter( 'get_previous_post_where', 'example_custom_adjacent_post_where', 10, 5 );

function example_custom_adjacent_post_where( $where, $in_same_term, $excluded_terms, $taxonomy, $post ) {

    // IMPORTANT: Replace this with your logic to find the desired adjacent post.
    $adjacent_post = example_find_adjacent_post_function( $post );
	
    if ( $adjacent_post instanceof WP_Post ) {
        // Replace the date comparison.
        $where = str_replace( $post->post_date, $adjacent_post->post_date, $where );

        // Replace the post ID in the comparison.
        $where = preg_replace(
            "/AND p\.ID (<|>) {$post->ID}\)/",
            "AND p.ID $1 {$adjacent_post->ID})",
            $where
        );
    }

    return $where;
}

You could also add a version_compare( $wp_version, '6.9', '>=' ) test if youโ€™d like to support multiple versions.

Important: donโ€™t forget to first test any code on your site, and customize it according to your needs.

Next time

At the time, this was not a known breaking change, and was classed as a bug fix.

However as @jmdodd points out in the ticket, changes to WP_Query, especially SQL changes should be, by default, communicated more widely. Going forward:

  1. Reach out to known plugins using the get_{$adjacent}_post_where filter.
  2. Include a migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. guidance in the 6.9 field guideField guide The field guide is a type of blogpost published on Make/Core during the release candidate phase of the WordPress release cycle. The field guide generally lists all the dev notes published during the beta cycle. This guide is linked in the about page of the corresponding version of WordPress, in the release post and in the HelpHub version page. (as applicable).
  3. Test against any known, popular plugins that modify adjacent post queries.

Whatโ€™s Next and Getting Help

Discussions have started on the ticket about ways to make this more robust in future WordPress versions. If youโ€™re experiencing issues related to this change:

  1. Check Trac ticket #64390 for the latest updates.
  2. Ask questions in the #core channel on WordPress SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/..
  3. Review the original fix PR #10394.

Thank you for your patience and understanding. If you maintain a plugin affected by this change, please update it using the guidance above, and donโ€™t hesitate to reach out if you need assistance.

Thanks to @westonruter @isabel_brison @andrewserong @jmdodd for helping to prepare this post.

#6-9, #dev-notes

WordPress 6.9 Release Candidate 4

The forth Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). (โ€œRC4โ€) for WordPress 6.9 is ready for download and testing!

This version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, itโ€™s recommended that you evaluate RC4 on a test server and site.

Reaching this phase of the release cycle is an important milestone. While release candidates are considered ready for release, testing remains crucial to ensure that everything in WordPress 6.9 is the best it can be.

You can test WordPress 6.9 RC4 in four ways:

PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-partyInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the โ€œBleeding edgebleeding edge The latest revision of the software, generally in development and often unstable. Also known as trunk.โ€ channel and โ€œBetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process./RCrelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). Onlyโ€ stream).
Direct DownloadDownload the RC4 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command:ย 
wp core update --version=6.9-RC4
WordPress PlaygroundUse the 6.9 RC4 WordPress Playground instance to test the software directly in your browser without the need for a separate site or setup.

The scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing RC versions is vital to making this release as stable and powerful as possible. Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

Whatโ€™s in WordPress 6.9 RC4?

Get a recap of WordPress 6.9โ€™s highlighted features in the Beta 1 announcement. Take a look at theย WordPress 6.9 Field Guide. For more technical information related to issues addressed since RC3, you can browse the following links:

The following updates have been addressed since RC3:

  • #64305: Hidden async-upload field marked as required causes publishing to fail in the editor.
  • #64315: Running _wp_cron() during shutdown breaks sites using ALTERNATE_WP_CRON.
  • #64269: โ€œRemoveโ€ button in Media Library gallery has a UIUI User interface styling issue.
  • #41604: REST APIREST API The 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/. incorrectly returns success instead of an error when updating a non-existent setting.
  • Ability to Hide blocks

How you can contribute

WordPress is open sourceOpen Source Open Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. software made possible by a passionate community of people collaborating on and contributing to its development. The resources below outline various ways you can help the worldโ€™s most popular open source web platform, regardless of your technical expertise.

Get involved in testing

Testing for issues is crucial to the development of any software. Itโ€™s also a meaningful way for anyone to contribute.ย 

Your help testing the WordPress 6.9 RC4 version is key to ensuring that the final release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important. This detailed guide will walk you through testing features in WordPress 6.9. For those new to testing, follow this general testing guide for more details on getting set up.

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. report.ย  You can also check your issue against a list of known bugs.ย 

Curious about testing releases in general?ย  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

Update your theme or plugin

For plugin and theme authors, your products play an integral role in extending the functionality and value of WordPress for all users.

Thanks for continuing to test your themes and plugins with the WordPress 6.9 beta releases. If you havenโ€™t yet, make sure to conclude your testing and update the โ€œTested up toโ€ version in your pluginโ€™s readme file to 6.9.

If you find compatibility issues, please post detailed information to the support forum.

Test on your hosting platforms

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here.ย 

Help translate WordPress

Do you speak a language other than English? ยฟEspaรฑol? Franรงais? ะ ัƒััะบะธะน? ๆ—ฅๆœฌ่ชž? เคนเคฟเคจเฅเคฆเฅ€? เฆฌเฆพเฆ‚เฆฒเฆพ? เคฎเคฐเคพเค เฅ€? เฒ•เฒจเณเฒจเฒก?ย  You can help translate WordPress into more than 100 languages. This release milestone (RC2) also marks the hard string freeze point of the 6.9 release cycle.

An RC4 haiku

Petals gently pause,
Perfect in their final form โ€“
Waiting for release.

Props to @amykamala, @wildworks, @krupajnanda, @westonruter for proofreading and review.

#6-9, #development, #release

WordPress 6.9 Frontend Performance Field Guide

This post is the latest in a series of updates focused on the performance improvements of major releases (see 6.8, 6.7, 6.6, 6.5, 6.4, 6.3, and 6.2).

WordPress 6.9 is the second and final major releasemajor release A 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. of 2025. It includes numerous improvements to the performance of loading pages on the frontend:

  • Scripts: improve script loading performance by adding support for fetchpriority, printing script modules in the footer, and optimizing the emoji detection script.
  • Styles: optimize loading of stylesheets by loading blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. styles on demand in classic themes, omitting styles for hidden blocks, increasing the inline style limit from 20K to 40K, and inlining minified stylesheets in block themes.
  • Introduce the template enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. output buffer to implement optimizations previously impossible (such as the aforementioned on-demand style loading in classic themes).
  • More: spawn WP Cron at shutdown, eliminate layout shifts in the Video block, fix RSS feedRSS Feed RSS is an acronym for Real Simple Syndication which is a type of web feed which allows users to access updates to online content in a standardized, computer-readable format. This is the feed. caching, and so on.

The performance changes in this release include 38 Trac tickets (26 enhancements, 11 defects, 1 task) and 31 Gutenberg PRs, although this post does not describe improvements to the performance of the editor nor the database query and caching optimizations. This post highlights the key changes to the frontend for site visitors, as well as looking at their impact in terms of web vitals metrics, such as TTFB, FCP, and LCP.

Continue reading โ†’

#6-9, #core, #core-performance, #css, #dev-notes, #dev-notes-6-9, #javascript, #performance

Miscellaneous Developer-focused Changes in 6.9

In WordPress 6.9, a handful of small, developer-focused changes were made that deserve to be called out. Letโ€™s take a look!

PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.5 New Function Polyfills

The upcoming 8.5 release of PHP includes 2 new functions that can be used to retrieve values from an array:

To encourage more modern PHP practices, polyfills of these functions have been added to WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. so that they can be used safely without needing to include function_exists() checks.

For more information, see #63853.

Improved Feed Caching on Multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site Installs

When RSS feeds are fetched using fetch_feed(), they are currently cached using the (get|set|delete)_transient() functions. On multisite installs, single site transients cannot be shared between sites, but site transients managed through (get|set|delete)_site_transient() can.

In WordPress 6.9, fetch_feed() will now store feeds as site transients instead. This allows a feed to be fetched and stored once for all sites on a multisite install, which improves the overall performance of feeds and reduces the amount of data cached in the database (or persistent object cache, if configured). One example where this is beneficial is the WordPress News blogblog (versus network, site) feed, which is fetched and displayed in a widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. on the dashboard for every user.

See #63719 for more details.

External Library Updates

The following external libraries bundled in WordPress are being updated in the 6.9 release:

  • ID3 has been updated to include two changes from the upstream repository that address PHP 8.5 compatibility issues (see #64051). Once a new version containing these two changes has officially been tagged, the library will be updated in full (see #64253).
  • PHPMailer has been updated from 6.9.1 to 6.11.1 (see #63811, #64052, #64055).
  • SimplePie has been updated from 1.8.0 to 1.9.0 (see #63717, #63961).
  • Sodium Compat has been updated from 1.21.1 to 1.23.0 (see #64008, #64079).

New Classic Themes Template for TaxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. Terms

In classic themes, you can now use term IDs when creating taxonomy templates. With taxonomy-$taxonomy-{$term->term_id}.php templates, you donโ€™t need to worry about templates breaking if you rename the Oakland Athletics term to Athletics the way you do if you use slug based template names.ย 

See #35326 for more information.

Better Handling of Transparent PNGs

WordPress 6.8 introduced a regressionregression A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5. that could degrade the quality of PNG images with transparency when processed with Imagick. This was fixed in [60667] by improving the detection of the various types of transparent PNG files and handles them each appropriately.

See #63448 for more information.

New HooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.

WordPress 6.9 will see 21 new action and filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. hooks added. Some will be detailed in a separate developer note, but theyโ€™re all listed below for easy reference.

New Action Hooks

There are 8 new action hooks being introduced in 6.9:ย 

New Filter Hooks

There are 13 new filters being introduced in 6.9:

A Final Farewell to Flash

While Flash was officially retired at the end of 2020, there were a few artifacts remaining within WordPress in the form of SWFObject and SWFUpload. These were removed in [60281] and will no longer ship in new versions of WordPress going forward.

For more information, see #52699 on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress..

Props @adamsilverstein for helping to draft the post, and @jorbin for peer-review.

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

Notes feature in WordPress 6.9

WordPress 6.9 introduces Notes, a new feature that allows you to leave contextual feedback at the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. level. With notes your team can stay aligned, track changes, and turn feedback into action all in one place. Notes can be resolved, and notes and their replies can be edited or deleted.

Who can use notes?

Because notes can only be created or viewed within the post editor, users must have the edit_post capabilitycapability Aย 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). for that post. By default, this means that:

  • Administrators and Editors can view all notes on all posts.
  • Authors and Contributors can view all notes for posts that they have authored.
  • Subscribers cannot view any notes.

Enabling notes for custom post types

Notes are enabled by default for the post and page built-in post types, but they can be enabled for any custom post typeCustom Post Type WordPress 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.. When you control the register_post_type() call, this is the preferred way to register support for Notes:

register_post_type( 'book', array(
	'label' => 'Books',
	'public' => true,
	'show_in_rest' => true,
	'supports' => array(
		'title',
		'editor' => array( 'notes' => true ),
		'author',
	),
) );

When the custom post type is registered through a pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party, support for Notes can be added by registering support using the following code snippet:

function custom_add_post_type_support() {
	$supports        = get_all_post_type_supports( 'my-post-type' );
	$editor_supports = array( 'notes' => true );

	// `add_post_type_support()` overwrites feature sub-properties, 
	// so they must be explicitly merged. 
	// See https://core.trac.wordpress.org/ticket/64156.
	if ( 
		is_array( $supports['editor'] ) && 
		isset( $supports['editor'][0] ) && 
		is_array( $supports['editor'][0] ) 
	) {
		$editor_supports = array_merge( $editor_supports, $supports['editor'][0] );
	}
	add_post_type_support( 'my-post-type', 'editor', $editor_supports );
}
add_action( 'init', 'custom_add_post_type_support' );

Since notes is a sub-feature of the editor, the code needs to manually merge the notes setting with other editor attributes. Work is underway in https://core.trac.wordpress.org/ticket/64156 to make this easier. Once this bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. is fixed, adding support will be simplified:

add_post_type_support( 'my-post-type', 'editor', array(
ย ย ย ย 'notes' => true,
) );

Accessing notes programmatically

Under the hood, Notes are WP_Comments stored in the comments table, and the standard comments APIs can be used to access them by specifying a comment_type ofย  note.ย 

For example, this will retrieve all notes for a given post ID:

$notes = get_comments( 
	array(
		'post_id' => $post_id,
		'type'    => 'note',
	)
);

Notes can also be retrieved using the REST APIREST API The 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/.:

$request = new WP_REST_Request( 'GET', '/wp/v2/comments' );
$request->set_param( 'post', $post_id );
$request->set_param( 'type', 'note' );
$response = rest_get_server()->dispatch( $request );
if ( ! is_wp_error( $response ) ) {
	$notes = $response->get_data();
	foreach ( $notes as $note ) {
		// Process each note as needed
	}
}

Note status

When a note is added to a block, it:

  • Starts in an โ€œOpenโ€ state with a comment_status of 0 (aka hold).ย 
  • When resolved, changes to a comment_status of 1 (aka approve).
  • When deleted, changes to a status of trash, unless EMPTY_TRASH_DAYS is 0 in which case deleted immediately.

The following snippet will get a list of all unresolved Notes for a given post:

$notes = get_comments( 
	array(
		'post_id' => $post_id,
		'type'    => 'note',
		'status'  => 'hold'
	)
);

Important: Notes must be explicitly requested by specifying either the note or all comment type. Otherwise they are excluded when retrieving comments:

// This only returns comments, 'notes' are automatically excluded.
$comments = get_comments( array ( 'post_id' => $post_id ) );

Notification emails

When another user adds a note to a post, the post_author will receive a notification that a note has been added to the post. Notifications are enabled by default and can be controlled at a site level under Settings->Discussions โ€“ Email me whenever > Anyone posts a note. Developers can also use the existing comment filters to control notifications.ย 

For example, to send notifications for notes on pages but not posts, use this snippet:

function only_notify_page_authors_of_notes( $notify, $comment_id ) {
	if ( 'note' !== get_comment_type( $comment_id ) {
		return $notify;
	}

	if ( 'page' === get_post_type( $comment_post_ID ) {
		return true;
	}

	return false;
}
add_filter( 'notify_post_author', 'only_notify_page_authors_of_notes', 10, 2 );

Miscellaneous

Notes permissions

As previously mentioned, only users who can edit a given post are able to add notes. Because notes are an internal/authorized user feature, the normal restrictions that apply to comment posting do not apply to notes, including the flood protection and duplicate prevention. In addition, the pre_comment_approved filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. is not run for notes.

Linking blocks to notes

Top level notes are linked to blocks with a metadata attribute. . When you add a new note to a block, the note ID is stored in block attributes metadata as noteId. Replies are linked to top level notes as children (with their parent set to the top level note)

To get the note ID from a block based on its clientId, you can use this code:

const attributes = getBlockAttributes( clientId );
const noteId     = attributes.metadata?.noteId;

Important: The reverse is not true โ€“ notes do not contain a link back to their associated block. To identify the block(s) associated with a note, search the blocks for the noteId in metadata. You can use this code snippet:

import { store as blockEditorStore } from '@wordpress/block-editor';

const { getBlockAttributes } = useSelect( blockEditorStore );

const { clientIds } = useSelect( ( select ) => {
	const { getClientIdsWithDescendants } = select( blockEditorStore );
	return {
		clientIds: getClientIdsWithDescendants(),
	};
}, [] );

// expectedNoteId is the note we are filtering for.
const blocksWithNote = clientIds.reduce( ( results, clientId ) => {
	const commentId = getBlockAttributes( clientId )?.metadata?.noteId;
	if ( commentId === expectedNoteId ) {
		results[ clientId ] = commentId;
	}
	return results;
}, {} );

Known limitations

  • A note can be associated with more than one block. If a block with a note is split or duplicated, the note becomes associated with both blocks. This is primarily due to an underlying limitation in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ that will be fixed in #29693.
  • A notification is sent for each new non-author note which may not be ideal for all users, especially for cases where a high volume of notes are added to a post will in turn generate a high volume of emails to the post author.
  • Notes do not work outside post content types, for example in templates.
  • All notes are block level, for example this means that they can not reference specific text within a paragraph or text across paragraph blocks.ย  In-line notes will become available as part of #59445.

Whatโ€™s next

There are already new features and enhancements planned for Notes in the next release of WordPress (7.0). These features were suggested during the development cycle, but didnโ€™t make it into the 6.9 release.

  • Fragment notes โ€“ the ability to leave a note on a part of a block or across blocks.
  • โ€œ@โ€ mentions โ€“ mention another user in a post and they will receive a notification.
  • Improved notifications โ€“ control frequency for notifications, for example receive a daily digest of all new note activity.
  • Improved floating layout for wide screens โ€“ shift the floating to sit between the editor frame and the sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme..
  • Minified mode โ€“ notes display as icons with avatars beside blocks that expand when clicked..
  • Wider availability across the editor including using notes with templates.
  • Real time collaboration with Notes.

You can follow along and contribute to the ongoing effort on the Notes iteration for 7.0 tracking issue.

Have an idea for how to improve Notes? Leave your feedback as a comment below or on the tracking issue linked above.

Props to @jeffpaul, @mamaduka, @wildworks, @annezazu, and @desrosj for review.

#core, #dev-notes, #notes