Bug Scrub Schedule for 5.9

With 5.9 well underway, we’re ready to schedule the 5.9 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. scrub sessions. These 5.9 specific ticketticket Created for both bug reports and feature development on the bug tracker. scrubs will happen each week until the final release.

Alpha Scrubs:

Hosted by @audrasjb

Hosted by @chaion07 (APAC-friendly)

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. Scrubs:

Focus: issues reported from the previous beta.

RC Scrubs:

Focus: issues reported from the previous RC

Check this schedule often, as it will change to reflect the latest information.

What about recurring component scrubs and triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. sessions?

The above 5.9 scheduled bug scrubs are separate and in addition.

For your reference, here are some of the recurring sessions:

  • Twenty Twenty-Two Triage: Every Monday 15:00 UTC in the #core-themes channel.
  • 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/ Design Triage: Every Tuesday 16:00 UTC in the #design channel.
  • 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) Scrub: Every Friday 15:00 UTC in the #accessibility channel.
  • Testing Scrub: Every Friday 13:15 UTC in the #core-test channel.
  • CSSCSS Cascading Style Sheets. Scrub: First Thursday of every month 20:00 UTC in the #core-css channel.
  • Upgrade/Install Component: Every Tuesday at 17:00 UTC in the #core-auto-update channel.
  • Help/About Component: Every Monday, 19:00 UTC in the #core channel.

Want to lead a bug scrub?

Did you know that anyone can lead a bug scrub at anytime? Yes, you can!

How? PingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” @audrasjb or @chaion07 on 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/. and let us know the day and time you’re considering as well as the report or tickets you want to scrub.

Planning one that’s 5.9-focused? Awesome! We’ll add it to the schedule here. You’ll get well deserved props in the weekly Dev Chat, as well as in the #props Slack channel!

Where can you find tickets to scrub?

  • Report 5 provides a list of all open 5.9 tickets:
    • Use this list to focus on highest priority tickets first.
    • Use this list to focus on tickets that haven’t received love in a while.
  • Report 6 provides a list of open 5.9 tickets ordered by workflow.

Need a refresher on bug scrubs? Checkout Leading Bug Scrubs in the coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. handbook.

Questions?

Have a question, concern, or suggestion? Want to lead a bug scrub? Please leave a comment or reach out directly to @audrasjb or @chaion07 on slack.

Thanks @jeffpaul for proof-reading.

#5-9, #bug-scrub

WordPress 5.8.2 RC 1

WordPress 5.8.2 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). 1 (RC1) is available for testing!

Some ways you can help testing WordPress 5.8.2 RC1:

  • Use the WordPress Beta Tester 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
    • as this is a minor RC release, select the Point ReleaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality. channel and the Nightlies stream. This will be the latest build including the RC and potentially any subsequent commits in trunk).
  • Use WP-CLIWP-CLI WP-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/ to test: wp core update https://wordpress.org/wordpress-5.8.2-RC1.zip
  • Directly download the 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./RC version (https://wordpress.org/wordpress-5.8.2-RC1.zip)

What’s in this release candidate?

5.8.2 Release Candidate 1 features 3 bug fixes on CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress..

The following core tickets from TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. are fixed:

  • #54207 – ca-bundle.crt contains expired certificate DST Root CA X3
  • #54129 – Undefined index posts_per_page in ajax-actions.php
  • #54323 – Too few arguments for function (closure)

What’s next?

The dev-reviewed workflow (double committercommitter A 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. sign-off) is now in effect when making any changes to the 5.8 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"..

As per the proposed WordPress 5.8.2 schedule, the final release is expected on Wednesday, November 10, 2021. Please note that this date can change depending on possible issues after RC1 is released. Coordination will happen in the 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/ 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/. #5-8-release-leads channel.

A special thanks to everyone who helped test, raised issues, and helped to fix tickets. With this release candidate testing continues, so please, help test!

The 5.8.2 release is being led by @desrosj and @circlecube.

Props @circlecube and @audrasjb for peer review.

#5-8, #5-8-2, #minor-releases, #releases

X-post: Block-based Themes Meeting Agenda: November 3, 2021

X-post from +make.wordpress.org/themes: Block-based Themes Meeting Agenda: November 3, 2021

Core Editor Improvement: Introducing template part focus mode

These “CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Editor Improvement…” posts (labelled with the #core-editor-improvement tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.)) are a series dedicated to highlighting various new features, improvements, and more from Core Editor related projects. 

With more tools to edit your entire site, this new view was created to allow folks to have a space to focus specifically on editing a single template part, like a headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. or footer. At a high level, this focused mode helps eliminate distractions when editing template parts, provide a pathway for backwards compatibility, and opens up new possibilities around permissions.

You will be able to access this mode in a few ways once 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/ 11.9 is released and, if all goes well, in WordPress 5.9: 

  • Select the template part in the Site editor > Click on the three dot menu > Select “Edit Header” or the respective template part name. 
  • Select the template part in List View > Click on the three dot menu > Select “Edit Header” or the respective template part name. 
  • From the Browsing 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. > Navigate to Template Parts > Select the template part you want to customize.
  • From the Top Toolbar > Click on the three dot menu under “Areas” next to the template part you want to customize.

Keep in mind that some of these flows may change as the site editing flows get prepared for 5.9!

As you explore this mode, you’ll notice a few extra touches too, including the visual background similar to the template editor mode to indicate that you’re in a new editing environment and the ability to resize the editing field horizontally with drag handles. There’s always more to be done though, particularly around clarifying when different edits are global vs local.

Looking forward, this work will ultimately pave the path for a smooth transition into 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. themes by turning existing 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. areas into block template parts. It also creates the ability to have only folks with certain permissions the ability to edit a template part directly, building on the work around template locking. The UXUX User experience lessons learned from this effort will inevitably benefit future projects like the Navigation Editor too!

For a deep dive of all that went into this project, check out this overview issue. To be on the cutting edge, use Gutenberg 11.9 when it’s released or check out the current version today to get a sense of what it can do without the latest and greatest PRs. If you’re game to wait a bit longer, expect to see it in WordPress 5.9 coming in December. 

Thank you to @jameskoster for the video and @priethor @bph @kevin940726 for reviewing the content.

#core-editor, #gutenberg

Editor Chat Agenda: 03 November 2021

Facilitator and notetaker @ajitbohra

This is the agenda for the weekly editor chat scheduled for Wednesday, 03 November 2021, 14:00 UTC.

This meeting is held in the #core-editor channel in the Making 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/..

Even if you can’t make the meeting, you’re encouraged to share anything relevant for the meeting in the comments below:

  • If you have anything to share for the Task Coordination section, please leave it as a comment on this post.
  • If you have anything to propose for the agenda or other specific items related to those listed above, please leave a comment below.

#core-editor #core-editor-agenda #agenda #meetings

A Week in Core – November 1, 2021

Welcome back to a new issue of Week in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Let’s take a look at what changed on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between October 25 and November 1, 2021.

  • 33 commits
  • 38 contributors
  • 44 tickets created
  • 5 tickets reopened
  • 34 tickets closed

The Core team is currently working on the next point (5.8.2) and major (5.9) releases 🛠

Worth noting that each feature slated to the 5.9 milestone has been validated, that the Twenty Twenty-Two Theme development is on the way, and the 5.9 bug scrub schedule has been published 🚀

Ticketticket Created for both bug reports and feature development on the bug tracker. numbers are based on the Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Code changes

Administration

  • Hide mobile menu on focusout – #53587

Application Passwords

  • Add end-to-end (e2e) tests – #54241
  • Various docblockdocblock (phpdoc, xref, inline docs) improvements – #53399, #42790

Build/Test Tools

  • Adjust 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/. notifications for scheduled and workflow_dispatch events – #53363
  • Escape $ within commit messages for $variables#53363
  • Ignore “null to nullable” deprecations for select tests – #53635
  • Use correct URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org for a GitHubGitHub GitHub is a website that offers online implementation of git repositories that can 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/ Action workflow run – #53363
  • Some test improvements for clean_dirsize_cache() tests: – #52241, #53363

Coding Standards

  • Correct alignment in WP_Site_Health::get_test_update_temp_backup_writable()#51857, #53359
  • Correct alignment in wp_enqueue_global_styles()#53359
  • Rename the $process variable to $processed_response for clarity in WP_Http_Streams::request()#53359

Date/Time

  • Improve the docblocks for various date and time related functions – #53399, #28992, #40653

Docs

  • Add a @since note for the rest_namespace argument of register_post_type() and register_taxonomy()#53399
  • Add a @since note to WP_REST_Post_Types_Controller::get_item_schema() for the supports and visibility properties – #53399
  • Document the usage of some globals in wp-includes/script-loader.php#53399
  • Further update the debug_information 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. description per the documentation standards – #53399
  • Miscellaneous docblock improvements – #53399
  • Miscellaneous docblock improvements – #53399

Editor

  • Include post’s title in editor title element – #52314

General

  • Remove role="navigation" from nav elements – #54054

HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. 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.

  • add suggested filename support to download_url()#38231

KSES

  • Add options for restricting tags based upon their attributes – #54261

Media

  • Close attachment details modal with esc key – #53924
  • Remove deprecated click function in media uploader – #53261

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/.

  • Add visibility information to the Post Types controller – #54055
  • Send a 500 status code when JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. encoding fails – #53056
  • Support custom namespaces for custom post types – #53656
  • Support custom namespaces for taxonomies – #54267

Role/Capability

  • Add support for capability queries in WP_User_Query#16841

Script Loader

  • Correct the number of arguments passed to the closure in enqueue_block_styles_assets()#54323

Site Health

  • Correct and improve the documentation for the debug_information hook – #53399
  • Internationalizes count in the info section headings – #54341

Widgets

  • Use a text-based button to select location – #53311

Props

Thanks to the 38 people who contributed to WordPress Core on Trac last week: @swissspidy (5), @sabernhardt (4), @spacedmonkey (4), @peterwilsoncc (3), @costdev (3), @dd32 (2), @jrf (2), @ocean90 (2), @AmethystAnswers (1), @sourovroy (1), @kaneva (1), @vondelphia (1), @boonebgorges (1), @scribu (1), @lgladdly (1), @SergeyBiryukov (1), @aristath (1), @shimon246 (1), @gziolo (1), @cklosows (1), @johnjamesjacoby (1), @kapilpaul (1), @jorbin (1), @desrosj (1), @lalitjalandhar (1), @hermpheus (1), @pento (1), @isabel_brison (1), @kevin940726 (1), @juhise (1), @justinahinon (1), @mukesh27 (1), @hellofromTonya (1), @audrasjb (1), @alexstine (1), @skierpage (1), @johnbillion (1), and @psrpinto (1).

Congrats and welcome to our 5 new contributors of the week: @shimon246, @lalitjalandhar, @sourovroy, @vondelphia, and @kaneva ♥️

Core committers: @sergeybiryukov (9), @joedolson (6), @johnbillion (5), @timothyblynjacobs (4), @hellofromtonya (3), @desrosj (3), @pento (1), @swissspidy (1), and @johnjamesjacoby (1).

#5-8-2, #5-9, #core, #week-in-core

Editor chat summary: 27 October, 2021

This post summarizes the weekly editor chat meeting (agenda here) held on  Wednesday, October 27 2021, 04:00 PM GMT+1. in Slack. Moderated by @andraganescu.

General updates

Future agendas we should drop the “What’s Next in ..” reminder link as the Go/No Go post supersedes the “What’s Next”.

@juanmaguitar asked who are the Proposed WordPress 5.9 Leads and got directed to the early squad list here that should be published soon.

@noisysocks mentioned Gutenberg 11.9 is the last plugin release which will make its way into WP 5.9. It will be “cut” on November 3 which is very soon.

Key project updates

Based on the scope for Site Editing projects.

Template Editor

Global Styling

@jorgefilipecosta provided an update:

  • A PR proposing the new color palette editor and a PR that makes multiple color palettes from different sources available to users were proposed PR 35783PR 35783.
  • The new global styles 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/. endpoints are also in progress PR 35801PR 35985, and at least the endpoint for user styles should be merged in the next hours.
  • The new design is based on progressive disclosure UIUI User interface where all the options are not visible right away that is based on using the new tools panel on the multiple 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. supports that exist, and that work is also in progress for colors and borders PR 33743PR 34027

Patterns

  • @ntsekouras explained that while the  patterns tracking issue suggested to implement a way for allowing themes to surface specific patterns from the pattern directory, in reality development is tightly coupled with the pattern directory and the current ‘closed’ submission system, so more exploration needs to happen.

Navigation Block & Navigation Editor

@getdave provided an update:

Mobile Team

@hypest provided an update:

Shipped

  • Rolled out in-editor Help screen and new-block Inserter Badge to all users.

Fixes

  • Pin Node to v14 on CI to match 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/ web’s CI.
  • Autosave issue in the Unsupported Block Editor.
  • iOSiOS The operating system used on iPhones and iPads. Safe Areas issue in the in-editor Help screen.
  • Fixed a loading glitch in the embed blocks.

In Progress

  • Adding more tests for the Embed block.
  • GSS Font size, line height, colors.

Task Coordination

@mamaduka

  • Fixed 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. that was causing post editor to crash when switching between preview types.
  • URL Details endpoint now will check og:description when searching for site description.
  • Fixed (waiting for review) the bug for Classic block. It was copying content to other blocks during the “Select all” action.

@jorgefilipecosta

  • Reviewed and helped the work to fix the background text higlings migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. that was affecting websites in production using the gutenberg 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 https://github.com/WordPress/gutenberg/pull/35516.
  • Implemented the new color palette editor.
  • Updated color and gradient components to show colors from all the origins.
  • Submitted some smaller fixes and enhancements.
  • Reviewed the global styles endpoint.
  • Multiple smaller PR reviews.

@bph

  • Tomorrow Live Q & A on Converting classic Widget to blocks w/ Buddy Press team @imath  @vapvarun and @dcavins  – Join us and/or share in your networknetwork (versus site, blog). It will be streamed to YouTube as well. (by the time meeting notes come out we might have a recording on YouTube. )
  • Prep and recording of Gutenberg Changelog episode 54 – Gutenberg 11.8 and more. w/ @gziolo
  • Developer Hours to start mid November. Coordination work ongoing.
  • Preliminary prep for WordPress 5.9 documentation

@getdave

@ajlende

@annezazu

  • accepted test co-lead for 5.9 along with helping with user docs
  • working on the next round of FSE answers,
  • working on figuring out next call for testing,
  • doing some light triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. + testing!

@colorful-tones

  • I’m looking for some guidance on Global Styles: Form elements. I’m looking to dive in today and get a PR going, but want to make sure I have scope and scale in mind for adding any features.

Open Floor

@cbravobernal asked about issues because of getting block attributes with style and class together in a string and pointed to the trac issue.

@overclokk raised an issue detailing a proposal to remove block-templates and block-templates-parts directories for FSE – Full site editing

#core-editor, #core-editor-summary, #gutenberg, #meeting-notes, #summary

WordPress 5.9 Editor Update – 1 November

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/ 11.9 RC moved to Friday, 5 November

Gutenberg 11.9 (the last 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 release which will make its way into WP 5.9) will now have its RC cut on Friday, 5 November. This give us an extra two days to get our PRs merged in time for the WordPress 5.9 feature freeze.

“Must-have” scrub at 05:00 UTC Wednesday, 3 November

@mamaduka and I will triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. the WordPress 5.9 Must-Haves project board in #core-editor at 05:00 UTC on Wednesday, 3 November. Feel free to join along!

19 PRs awaiting review

There are 19 PRs in the “Needs review” column right now. Helping to review these is the most impactful way that you, dear reader, can help with WordPress 5.9 right now! 🙏

8 issues with no assignee

There are 8 issues in the “To do” column right now with no assignee. Please help them along if you can! 🙏

✌️

#core-editor #5-9

Thunks in Gutenberg

Gutenberg 11.6 added support for thunks. You can think of thunks as of functions that can be dispatched:

// actions.js
export const myThunkAction = () => ( { select, dispatch } ) => {
	return "I'm a thunk! I can be dispatched, use selectors, and even dispatch other actions.";
};

Why are thunks useful?

Thunks expand the meaning of what a Redux action is. Before thunks, actions were purely functional and could only return and yield data. Common use cases such as interacting with the store or requesting 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. data from an action required using a separate control. You would often see code like:

export function* saveRecordAction( id ) {
	const record = yield controls.select( 'current-store', 'getRecord', id );
	yield { type: 'BEFORE_SAVE', id, record };
	const results = yield controls.fetch({ url: 'https://...', method: 'POST', data: record });
	yield { type: 'AFTER_SAVE', id, results };
	return results;
}

const controls = {
	select: // ...,
	fetch: // ...,
};

Side effects like store operations and fetch functions would be implemented outside of the action. Thunks provide an alternative to this approach. They allow you to use side effects inline, like this:

export const saveRecordAction = ( id ) => async ({ select, dispatch }) => {
	const record = select( 'current-store', 'getRecord', id );
	dispatch({ type: 'BEFORE_SAVE', id, record });
	const response = await fetch({ url: 'https://...', method: 'POST', data: record });
	const results = await response.json();
	dispatch({ type: 'AFTER_SAVE', id, results });
	return results;
}

This removes the need to implement separate controls.

Thunks have access to the store helpers

Let’s take a look at an example from 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/ coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Prior to thunks, the toggleFeature action from the @wordpress/interface package was implemented like this:

export function* toggleFeature( scope, featureName ) {
	const currentValue = yield controls.select(
		interfaceStoreName,
		'isFeatureActive',
		scope,
		featureName
	);

	yield controls.dispatch(
		interfaceStoreName,
		'setFeatureValue',
		scope,
		featureName,
		! currentValue
	);
}

Controls were the only way to dispatch actions and select data from the store.

With thunks, there is a cleaner way. This is how toggleFeature is implemented now:

export function toggleFeature( scope, featureName ) {
	return function ( { select, dispatch } ) {
		const currentValue = select.isFeatureActive( scope, featureName );
		dispatch.setFeatureValue( scope, featureName, ! currentValue );
	};
}

Thanks to the select and dispatch arguments, thunks may use the store directly without the need for generators and controls.

Thunks may be async

Imagine a simple ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. app that allows you to set the temperature on a thermostat. It only has one input and one button. Clicking the button dispatches a saveTemperatureToAPI action with the value from the input.

If we used controls to save the temperature, the store definition would look like below:

const store = wp.data.createReduxStore( 'my-store', {
    actions: {
        saveTemperatureToAPI: function*( temperature ) {
            const result = yield { type: 'FETCH_JSON', url: 'https://...', method: 'POST', data: { temperature } };
            return result;
        }
    },
    controls: { 
        async FETCH_JSON( action ) {
            const response = await window.fetch( action.url, {
                method: action.method,
                body: JSON.stringify( action.data ),
            } );
            return response.json();
        }
    },
    // reducers, selectors, ...
} );

While the code is reasonably straightforward, there is a level of indirection. The saveTemperatureToAPI action does not talk directly to the API, but has to go through the FETCH_JSON control.

Let’s see how this indirection can be removed with thunks:

const store = wp.data.createReduxStore( 'my-store', {
    __experimentalUseThunks: true,
    actions: {
        saveTemperatureToAPI: ( temperature ) => async () => {
            const response = await window.fetch( 'https://...', {
                method: 'POST',
                body: JSON.stringify( { temperature } ),
            } );
            return await response.json();
        }
    },
    // reducers, selectors, ...
} );

That’s pretty cool! What’s even better is that resolvers are supported as well:

const store = wp.data.createReduxStore( 'my-store', {
    // ...
    selectors: {
        getTemperature: ( state ) => state.temperature
    },
    resolvers: {
        getTemperature: () => async ( { dispatch } ) => {
            const response = await window.fetch( 'https://...' );
            const result = await response.json();
            dispatch.receiveCurrentTemperature( result.temperature );
        }
    },
    // ...
} );

Support for thunks is experimental for now. You can enable it by setting __experimentalUseThunks: true when registering your store.

Thunks API

A thunk receives a single object argument with the following keys:

select

An object containing the store’s selectors pre-bound to state, which means you don’t need to provide the state, only the additional arguments. select triggers the related resolvers, if any, but does not wait for them to finish. It just returns the current value even if it’s null.

If a selector is part of the public API, it’s available as a method on the select object:

const thunk = () => ( { select } ) => {
    // select is an object of the store’s selectors, pre-bound to current state:
    const temperature = select.getTemperature();
}

Since not all selectors are exposed on the store, select doubles as a function that supports passing a selector as an argument:

const thunk = () => ( { select } ) => {
    // select supports private selectors:
    const doubleTemperature = select( ( temperature ) => temperature * 2 );
}

resolveSelect

resolveSelect is the same as select, except it returns a promise that resolves with the value provided by the related resolver.

const thunk = () => ( { resolveSelect } ) => {
    const temperature = await resolveSelect.getTemperature();
}

dispatch

An object containing the store’s actions

If an action is part of the public API, it’s available as a method on the dispatch object:

const thunk = () => ( { dispatch } ) => {
    // dispatch is an object of the store’s actions:
    const temperature = await dispatch.retrieveTemperature();
}

Since not all actions are exposed on the store, dispatch doubles as a function that supports passing a Redux action as an argument:

const thunk = () => async ( { dispatch } ) => {
	// dispatch is also a function accepting inline actions:
	dispatch({ type: 'SET_TEMPERATURE', temperature: result.value });
    
	// thunks are interchangeable with actions
	dispatch( updateTemperature( 100 ) );
	
	// Thunks may be async, too. When they are, dispatch returns a promise
	await dispatch( ( ) => window.fetch( /* ... */ ) );
}

registry

A registry provides access to other stores through its dispatchselect, and resolveSelect methods. These are very similar to the ones described above, with a slight twist. Calling registry.select( storeName ) returns a function returning an object of selectors from storeName. This comes handy when you need to interact with another store. For example:

const thunk = () => ( { registry } ) => {
  const error = registry.select( 'core' ).getLastEntitySaveError( 'root', 'menu', menuId );
  /* ... */
}

This article is now a part of the developer’s handbook.

Special thanks to @jsnajdr, @get_dave, and @mcsf for their countless reviews and ideas for improving this article.

WordPress Performance Team kick off

Two weeks ago, Google and Yoast WordPress contributors posted a proposal to create a Performance team responsible for coordinating efforts to increase the performance (speed) of WordPress. The proposal was very well received overall, and many other contributors showed interest in joining the effort (thanks everyone).

This post aims at announcing the next steps.

Initial contributors coordination

As authors of the initial proposal, long time WordPress contributors, @tweetythierry, @flixos90, @aristath, @justinahinon, @adamsilverstein (in no particular order) are committed to:

  • lead the working groups formation
  • coordinate the initial administrative tasks (slackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel, weekly meetings, schedule working groups representative nominations, etc.)
  • create a mission statement for the team
  • coordinate the areas to tackle
  • outline the scope and the roadmap

If you have interest in contributing to any of the above, please join the kickoff meeting, if you can, or use the comments of this post to do so.

Everybody is welcome to join working groups and contribute to performance enhancements without specific nomination 🙂

Kickoff meeting

Given the large interest from many contributors, it sounds like getting together is the first step.

By looking at the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Meetings calendar, Tuesdays at 3PM UTC seem good candidates. @justinahinon has offered to run chats ad interim, the kick-off meeting will happen on Tuesday, November 2nd 2021 at 3PM UTC in the #performance Slack channel.

Agenda

  • Welcome
  • Contributor interest open floor
  • Defining areas of focus

Defining focus areas and working groups

As we have seen from the initial post comments, there are no shortage of areas in need of performance enhancements in WordPress (which is a good problem to have in a way). With that in mind, we will initially aim to keep the scope limited by defining the most impactful area of focus and create working groups if need be. Defined focus areas will be the main points of discussion during weekly chats.

An agenda item for the first meetings will be to define the initial focus areas for the team. Every contributor will be asked to self-assign themselves to one or two areas, to indicate what they would like to work on. The performance projects are assembled in a spreadsheet which can already be reviewed ahead of the kickoff meeting.

This is not exclusive of any performance contributions.

Props

Thanks to the following for their involvement in authoring, proofreading and providing feedback on this post.

@francina, @flixos90, @aristath, @tweetythierry, @justinahinon (in no particular order)

#agenda, #meeting, #performance, #performance-chat

What’s new in Gutenberg 11.8.0? (27 October)

October is almost over, and we’re really close to WordPress 5.9, with this version 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/ being the second to last to make it into that release. This time around we have plenty of enhancements to the editing experience, including a way to discover Featured 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. Patterns, spacing tools for heading blocks, new animations for some elements (such as Dropzone, and Insertion Point), and more.

Featured Patterns from the Pattern Directory.

The Pattern Directory is the go-to source for great Block Patterns, and with this enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. to the inserter, users get direct access to a selection of featured Patterns, making it easier to find rich Patterns to use or get inspiration from.

Spacing Tools now available to more blocks

Spacing controls are an important piece when getting your Posts, Pages, and Templates looking just right. In Gutenberg 11.8 we’re getting great Improvements in this area.

Spacing on Heading Blocks — Spacing controls were already available for the Site Title Block, and it made sense to add this possibility for all blocks that generate headings, including the Navigation Block, as seen below! With this enhancement, it’s no longer necessary to manually add padding or margin support to each Pattern or Template that uses heading blocks.

Gap support on the Navigation Block — Enables us to control the space between elements of a Navigation Block, taking advantage of the Block Gap support added in Gutenberg 11.5.

Button Block gap and vertical margin — Also related to Block Gap support, this enables us to control the space between buttons, as well as adding vertical margin support in order to adjust the space above and below the Buttons container. As a side note, the discussion behind this change shows off how Contributors come together to add these useful features to Gutenberg; a big thank you to everyone involved!

Enable always-on burger menu for Responsive Navigation Block.

This update is two-fold: users can now hide a Navigation MenuNavigation Menu A theme feature introduced with Version 3.0. WordPress includes an easy to use mechanism for giving various control options to get users to click from one place to another on a site. behind a button at all times, and they also get a new and improved Navigation Block Display options panel.

Other notable improvements

Allow child theme.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. to be merged with parent theme.json

Child themes containing a theme.json file will now apply their styles on top of those defined by the parent theme’s theme.json, allowing them to easily overwrite certain styles while maintaining the parent’s base ones. If no theme.json file is present on the child themeChild theme A Child Theme is a customized theme based upon a Parent Theme. It’s considered best practice to create a child theme if you want to modify the CSS of your theme. https://developer.wordpress.org/themes/advanced-topics/child-themes/., the parent’s styles are applied, and the other way around as well.

More control over Cover and Column blocks’ inner blocks

Starting in Gutenberg 11.8, there is more control over which types of blocks are allowed inside some container blocks, as allowedBlocks support has been added to the Cover Block and to the Column Block.

Enable the Slash Inserter for heading, list, and quote.

The Slash Inserter is the fastest way to find, and add blocks to your content, and from now on users are able to utilize it to add blocks within a Heading, List, and Quote blocks, similarly to how it works in basic Paragraph blocks.


Animations for insertion point, drop zone, and other elements

This release adds a nice touch by providing animations for insertion points and drop zones, among others. For extra clarity, and flair. ✨

Show the ellipsis menu in the ListView

Last but not least, this release also enables the List View’s ellipsis menu (block settings menu) in the Site Editor. Not only does this menu let users copy, duplicate, remove, and perform a bunch of options to blocks from within the List View, but it also helps access the recently revamped Template Part Focus Mode.

11.8.0 Changelog

Spacing tools

  • Buttons: Add gap and vertical margin support. (34546)
  • Add spacing controls to all heading blocks. (35772)
  • Feature Image: Add spacing controls to the featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. block. (35775)
  • Navigation block: Add block gap support. (35277)

More control over inner blocks

  • Column: Allow the specification of blocks allowed within columns. (35342)
  • Cover: Add allowedBlocks and TemplateLock attributes in Cover Block. (31326)

Child theme support for theme.json

  • Allow child theme.json to be merged with parent theme.json. (35459)

Featured Patterns from the directory

  • Featured patterns from the pattern directory. (35115)

Other Improvements

  • Enable slash inserter for heading, list, and quote. (35360)
  • Show the ellipsis menu in the ListView. (35170)
  • Add animations for insertion point, dropzone, and other elements. (33132)
  • Heading: Autogenerate heading anchors. (30825)
  • Enable always-on burger menu for responsive navigation menus. (35568)

Gutenberg 11.8

Enhancements

Block Library

  • Add spacing controls to all heading blocks. (35772)
  • Enable slash inserter for heading, list, and quote. (35360)
  • Unify theme block placeholder content. (35517)
  • Buttons: Add gap and vertical margin support. (34546)
  • Categories: Add support for showing only top-level categories. (35726)
  • Column: Allow the specification of blocks allowed within columns. (35342)
  • Comment Content Block: Add typography, color, and padding support. (35183)
  • Cover: Add allowedBlocks and TemplateLock attributes in Cover Block. (31326)
  • Cover: Add an option to set opacity when the background color is used. (35065)
  • Cover: Allow setting the height from the placeholder state. (35068)
  • Cover: Change dimRatio to 50 if media is added and dimRatio is set to 100. (35789)
  • Cover: Only use white text when the background of the cover block is dark. (33541)
  • Cover: Use the description in the placeholder. (34970)
  • Embed: Add Pinterest as an embed provider. (34895)
  • Feature Image: Add spacing controls to the featured image block. (35775)
  • Featured image and Image: Remove descendent space. (35466)
  • Gallery Block: Get media data in a single request. (34389)
  • Heading: Autogenerate heading anchors. (30825)
  • Quote: Update deprecation to expect style block supports. (35615)
  • Page List: Show empty placeholder if no items. (35441)
  • Post Date: Add more typography options. (35422)
  • Post Comment Author: Add link settings and block supports. (35595)
  • Post Comment Date: Add link setting and block supports. (35112)
  • Quote: Added a “plain” style for quote blocks. (29856)
  • Search: Enable inheritance in the search block. (35723)
  • Site Logo: Add a basic example to the site logo block. (35588)
  • Site Logo: Move the Reset button to the Replace menu dropdown. (35372)
  • Site Logo: placeholder tweaks. (35397)
  • Site Tagline: Add `fontStyle` control to Site Tagline block. (35507)
  • Site Tagline: Add wide + full support to the site tagline block. (35589)
  • Site Title: Add a basic example to the site title block. (35590)
  • Site Logo: Remove the “Reset” button icon. (35434)
  • Social Icons: Add top and bottom margin support. (35374)
  • Social Links: Polish logos only style. (35586)

Design Tools

  • ToolsPanel: Switch to the plus icon when no controls are present in the panel body. (34107)
  • Block Supports: Add panel-specific className. (35793)
  • Block Supports: Switch dimensions inspector controls slot to bubble virtually. (34725)
  • Inspector Controls: Resort the order of the design tools associated with styles 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.. (35574)

Styles

  • Allow users to store duotone data. (35318)
  • Allow child theme.json to be merged with parent theme.json. (35459)
  • Extract the three color panels to their own global styles view. (35400)
  • Font family: Switch from CSSCSS Cascading Style Sheets. Custom Property to classes. (31910)
  • Move the global styles reset action to a dropdown menu. (35559)
  • Update descriptions for the different screens under global styles. (35429)
  • Update the global styles 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.’s root view to use Card components. (35547)
  • Use text color to render the Aa preview in global styles. (35631)

Theming

  • Add [data-block] to appender. (35356)
  • Enable theme supports automatically for block themes. (35593)
  • Remove default padding/margin on the body of the page and editor canvas. (35421)
  • Support title in `templateParts`. (35626)
  • CSS: Add a reset for image heights. (30092)

Patterns

  • Increase the number of items per page for default Query 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. Block. (35603)
  • Featured patterns from the pattern directory. (35115)

Block Editor

  • Add animations for insertion point, dropzone, and other elements. (33132)
  • Adjust Link UIUI User interface visual styling. (35414)
  • Add some top margin. (35717)
  • Show the ellipsis menu in the ListView. (35170)

Template Editor

  • Add more options to template areas in template details. (35577)
  • Add template areas to template inspector. (35239)
  • Add template details to template parts. (35444)
  • Align the layout of the template card with the block card. (35391)
  • Update site editor block placeholder styling. (35513)
  • Use a dark background for the site editor. (35520)
  • Try: Remove dotted ancestor border. (35637)

Components

  • Add shortcut provider. (35652)
  • Iterate on the design of the colors and gradients panel. (35535)
  • Navigator: Update Navigator styling to facilitate sticky positioning. (35518)
  • Repositioned RangeControl tooltip and adjusted image zoom control dropdown height. (27374)
  • Remove segmented control vertical separators. (35497)
  • Storybook: Add RTL switcher to toolbar. (35711)
  • Storybook: Add story for TypographyPanel. (35293)
  • Storybook: Enable Controls and disable Knobs by default. (35682)
  • Storybook: Remove outdated decorator configuration. (35678)
  • Support “any” step in NumberControl and RangeControl. (34542)
  • ToggleGroupControl: Allow custom aria-label. (35423)
  • Update range control metrics. (35540)
  • Update FontSize control. (35395)

Packages

  • Create Block: Add PascalCase slug to create-block template strings. (35462)
  • Create Block: Allow local directories to be passed to –template as relative paths. (35645)
  • Test Setup: Add more complete mocks of common timer functions. (35368)
  • Scripts: Allow customization of the ARTIFACTS_PATH via WP_ARTIFACTS_PATH env var. (35371)

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)

  • Rich text popovers: Move to block tools to fix tab order. (34956)
  • Save button: Prevent focus loss. (34731)

Performance

Global Styles

  • Pass only the data the site editor uses. (35458)
  • Use a context provider for global styles configuration. (35622)

Bug Fixes

Block Library

  • Block Settings: Don’t render ‘Move to’ if the block cannot be moved. (35463)
  • Cover: Update placeholder minHeight style to support non-px units. (35614)
  • Cover: Update ‘templateLock’ attribute. (35671)
  • Featured Image: Center placeholder chip contents. (35417)
  • Heading: Fix undo/redo “trap”. (35767)
  • Heading: Remove anchor map when block unmounts. (35761)
  • Site Logo: Fix site logo block on dark backgrounds. (35718)

i18ni18n Internationalization, 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.

  • Fix HelpHub link i18n for page-jumps. (35404)
  • Fix template part block untranslated strings. (35715)
  • Translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. note for Home/end to avoid mistranslations. (35669)

Packages

  • Server Site Render: Prevent empty renders in `ServerSideRender` component caused by changing props while already fetching markup. (35433)

Components

  • Color Picker: Fix some issues on the color picker component; Remove tinycolor2;. (35562)
  • Navigator: Hide horizontal overflow in Navigator. (35332)
  • Popover: Fix __unstableBoundaryParent. (35082)
  • RawHTML component: Allow multiple children. (35532)
  • Rich text: Fix internal paste across multiline and single line instances. (35416)
  • Toggle Group Control: Fix the visual state when no option is selected. (35545)
  • Toggle Group Control: Fixed condition to show separator correctly. (35409)
  • Toggle Group Control: Fix ToggleGroupControlOption not passing ref to the underlying element. (35546)
  • Tooltip: For Tooltips, prevent emitting events to child elements if they are disabled. (35254)
  • Tooltip: Remove extra comma character from Tooltip when the underlying component is disabled. (35247)

Themes

  • Custom Templates: Use “title” from the theme.json. (35592)
  • Elements block support: Fix link color rendering on-site front end. (35446)
  • Move the link color styles to the footer. (35425)
  • Reset margin for all children of flow layouts. (35426)

Template Editor

  • Use slug as template parts area item key. (35796)
  • Fix missing titles in general areas. (35657)

Block 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.

  • Blocks: Apply the most recent filters to previously registered blocks. (34299)
  • Fix class serialization of font size and colors in dynamic blocks that use block supports. (35751)

Design Tools

  • Border Radius Control: Fix undefined value on the first click into RangeControl. (35651)

Block Editor

  • Fix updating the block list after block removal. (35721)
  • Fix sibling inserter animation. (35729)
  • Inserter: Fix gap between Search and Tabs. (35537)
  • Saving post: Transparent disabled button. (35542)
  • FSE: Coding standards: DOCTYPE should be the first line/character of any HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. document. (35442)

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/.

  • Fix preloading middleware referencing stale data for OPTIONS requests. (35527)

List View

  • Fix expand and collapse when the icon is clicked. (35526)

Global Styles

  • Fix presets that use a callback to validate user data. (35255)

CSS & Styling

  • Remove font size classes that are enqueued in the global stylesheet. (35182)

Block API

  • Allow more than 1 block stylesheets. (32510)

Experiments

Navigation Block

  • Add block gap support. (35277)
  • Enable always-on burger menu for responsive navigation menus. (35568)
  • Fix issue with space-between. (35722)
  • Submenu item paddings & fixes. (35716)
  • Fix navigation gap & padding issues. (35752)
  • Remove color inheritance specificity. (35725)
  • Remove deprecated class names from the Navigation Link block. (35358)

Navigation Screen

  • Use new coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. functions in menu items REST API. (35648)
  • Navigation: Preload more API requests. (35402)

Documentation

Handbook

  • Add categories to TOC to help digest the FAQ. (35519)
  • Add missing documentation for the wrapperProps property for the BlockListBlock component returned by the editor.blockListEdit 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.. (26961)
  • Add section on using theme.json schema. (35739)
  • Add Table of Contents to the FAQ page. (35455)
  • Clarify documentation for InnerBlocks orientation prop. (35712)
  • CustomRadius – Remove 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-only text. (35582)
  • Update block categories. (35523)
  • Update npm run build command for developing with Gutenberg locally. (35681)

Packages

  • Block Editor: Update default value of the `viewportWidth` attribute in documentation. (35659)
  • Components: Add the storybook link to the /components README. (35493)
  • Components: Add readme for SkipToSelectedBlock component. (32958)
  • Componentes: Add CHANGELOG entry for the fieldset removal from FontAppearanceControl. (35585)
  • Components: Add an entry to CHANGELOG regarding the new ColorPicker. (35486)
  • Components: Fix markdown highlighting on components CONTRIBUTING.md. (35633)
  • Components: Mark CustomSelectControl hint option as experimental. (35673)
  • Components: Polish ToggleGroupControl. (35600)
  • Components: Small tweaks to contributing guidelines. (35620)
  • Components: Update README for SelectControl. (28811)
  • Components: Update DateTimePicker component README to remove reference to isDayHighlighted callback. (35363)
  • Components, feat(SelectControl): Add children prop. (29540)
  • Create Block: Update documentation and readme post-merge of #35645. (35679)

Code Quality

  • Block Editor: Fix odd usage of transform-styles wrap function (and tighten types). (23599)
  • Constrained tabbing: Simplify. (34836)
  • Compose: Convert `usePrevious` hook to TypeScript. (35597)
  • Update Callers to handle when getBlockType return undefined. (35097)
  • Components: Polish ResizableBox and convert it to TypeScript. (35062)
  • Components: Remove `tinycolor` object usage from the gradient picker. (35544)
  • Components: Remove duplicated className in the Card component. (35333)
  • Components: Remove unused useJumpStep utility. (35561)
  • Components: Use new color picker props. (35566)
  • Components: Replace the color picker component with the new version. (35220)
  • Components, FontAppearanceControl: Remove fieldset wrapper. (35461)
  • Components, ToolsPanel: Remove hardcoded classnames. (35415)
  • Components, UnitControl component: Refactor JSX components to TypeScript. (35281)
  • Global Styles: Refactor how the Global Styles access and sets data. (35264)
  • Post Editor: Fix-up Post Editor’s preferences modal. (35369)
  • Remove Tinycolor usage from component color utils. (35553)
  • Reusable Blocks: Thunkify `reusable-blocks` store. (35217)

Tools

Packages

  • Scripts: Remove inject polyfill by default. (35436)

Testing

  • Child theme.json: Update test to better capture that children can update single parts in isolation. (35759)
  • Border Radius Control: Add fallback px unit and add utils tests. (35786)
  • Fix preview end-to-end tests. (35565)
  • Flaky Tests: Fix taxonomies flaky tests. (35534)
  • Flaky Tests: Try another fix for the flaky nav test. (35443)
  • Performance tests: Add more detailed loading metrics. (32237)
  • Components, Panel: Improve unit tests. (35658)
  • Enable/skipped metaboxMetabox A post metabox is a draggable box shown on the post editing screen. Its purpose is to allow the user to select or enter information in addition to the main post content. This information should be related to the post in some way. test. (35594)

Build Tooling

  • Revert version bump if build job fails. (33239)
  • Updates `reactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/.-native-aztec` android to use S3 dependency for the Aztec editor. (35606)

A note to extenders on the Navigation Editor

Bugfix #35527 fixed preloading on the Navigation Editor; now cache gets deleted after the first cache hit for OPTIONS requests, potentially affecting 3rd-party plugins.

Performance Benchmark

The following benchmark compares performance for a particularly sizeable post (~36,000 words, ~1,000 blocks) over the last releases. Such a large post isn’t representative of the average editing experience but is adequate for spotting variations in performance.

VersionTime To Render First BlockKeyPress Event (typing)
Gutenberg 11.86.21s40.2ms
Gutenberg 11.76.29s43.13ms
WordPress 5.86.74s51.54ms

Thanks to @critterverse for the assets on this post, @priethor for shepherding the process along, @dd32 for assisting with the release to the plugin directory, and to those who contributed to this release! 👏