Internationalization improvements in 6.7

Various internationalization (i18n) improvements are in WordPress 6.7, and this developers note focuses on these.

Determining whether a translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. exists

Sometimes it can be useful to know whether a translation already exists for in memory without having to first load the translation for the given text domain. The new has_translation() function allows for exactly that.

See #52696 / [59029] for more details.

Sending emails in the adminadmin (and super admin)’s localeLocale A locale is a combination of language and regional dialect. Usually locales correspond to countries, as is the case with Portuguese (Portugal) and Portuguese (Brazil). Other examples of locales include Canadian English and U.S. English.

Back in version 4.7, WordPress added the ability for users to set their preferred locale. When sending emails to a user, they are always sent in that locale, and everyone else receives the email in the site’s locale.

Now, WordPress 6.7 is going a step further: every time an email is sent to the administrator email address (admin_email), WordPress checks if a user with the same email address exists. If so, the email is sent in that user’s locale.

See #61518 / [59128] for more details.

Warnings if translations are loaded too early

WordPress now warns developers if they are loading translations too early in 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 or theme, before the current user is known. Existing functions like load_plugin_textdomain() and load_theme_textdomain() were updated to defer the actual loading to the existing just-in-time translation logic in coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. This reduces the likelihood of triggering the warning, and even improves performance in some situations by avoiding loading translations if they are not needed on a given page.

Reminder: if your plugin or theme is hosted on 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/ and is still using load_*_textdomain(), you can remove this call. Since WordPress 4.6, plugins and themes no longer need load_plugin_textdomain() or load_theme_textdomain(). WordPress automatically loads the translations for you when needed. If you still support older WordPress versions or do not host your plugin/theme on WordPress.org, move the function call to a later hook such as init.

When attempting to load translations before after_setup_theme or init, WordPress tries to load the current user earlier than usual, without giving other plugins a chance to potentially hook into the process. It also prevents any plugins from filtering translation calls, e.g. for switching the locale or file location. Hence the addition of this warning to call out this unexpected behavior.

See #44937, [59127], and [59157] for more details.

Your plugin might be _doing_it_wrong() if you for example directly call get_plugin_data() (which attempts to load translations by default) or __() without waiting for the init hook. Here is a common example that was found in an actual plugin that was fixed:

/**
 * Plugin Name: Awesome Plugin
 */

function myplugin_get_version() {
	require_once ABSPATH . 'wp-admin/includes/plugin.php';
	// Prevent early translation call by setting $translate to false.
	$plugin_data = get_plugin_data( __FILE__, false, /* $translate */ false );
	return $plugin_data['Version'];
}

define( 'MYPLUGIN_VERSION', myplugin_get_version() );

If you do not explicitly set $translate set to false when calling get_plugin_data(), the function translates the plugin metadata by default. Since this plugin just needs the version number, there is no need for translating any of the other fields.

Another example:

/**
 * Plugin Name: Awesome Plugin
 */

class My_Awesome_Plugin {
	public $name;
	public function __construct() {
		// This triggers just-in-time translation loading
		$this->name = __( 'My Awesome Plugin', 'my-awesome-plugin' );

		// ... do something
	}
}

// This immediately instantiates the class, way before `init`.
$myplugin = new My_Awesome_Plugin();

Here, a class is immediately instantiated in the main plugin file, and code within the class constructor uses a translation function. This can be avoided by deferring the class instantiation until after init, or deferring the translation call until later when it is actually needed.

If your plugin is affected by this warning, you can use code like follows to find out the code path that triggers it:

add_action(
	'doing_it_wrong_run',
	static function ( $function_name ) {
		if ( '_load_textdomain_just_in_time' === $function_name ) {
			debug_print_backtrace();
		}
	}
);

Developer tools such as Query Monitor are also helpful in situations like this.


Props to @ocean90, @fabiankaegy for review.

#6-7, #dev-notes, #dev-notes-6-7, #i18n

Merge Proposal: Preferred Languages

Almost 8 years ago the Preferred Languages feature project was kicked off in response to a feature requestfeature request A feature request should generally begin the process in the ideas forum, on a mailing list, as a plugin, or brought to the attention of the core team, such as through scope meetings held for each major release. Unsolicited tickets of this variety are typically, therefore, discouraged. in #28197. Right now it is probably the oldest active feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins.. Over time there were numerous updates, 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. fixes, and even a complete refactor. Preferred Languages was always built and maintained with the goal in mind to merge it into coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. one day. Now the time is finally right to do so.

Purpose & Goals

As a quick reminder, Preferred Languages replaces the existing languages dropdown with a supercharged version that lets you select multiple preferred languages. WordPress then tries to load the translations for the first language that’s available, falling back to the next language in your list otherwise. Without this, WordPress would just fall back to English (US) in such cases, which is not a great experience. Such a UIUI User interface is a pretty standard feature that can be seen for example also in operating system and browser settings.

Preferred Languages UI, showing the list of selected languages on the settings page.
Example of the Preferred Languages UI on the settings page

Note: Preferred Languages works for both the site language (can be set at Settings -> General) and the user language (can be set in the profile).

Project Background

You may wonder why it took such a long time. Since the project’s inception, a lot has changed in WordPress. For example, 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/ happened. That’s why Preferred Languages saw a complete rewrite using the same ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org/. components that also power 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 Gutenberg we also saw the introduction of JavaScript localization, which required further iterations to Preferred Languages. Then there was a need for merging incomplete translations, reducing the chances that you see missing strings in English. However, merging translations was very bad for performance, as it involves loading lots of translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. files. In WordPress 6.5 we finally completely replaced the localization library with a more performant solution that natively supports loading multiple files at once. So this last remaining blockerblocker A bug which is so severe that it blocks a release. is now finally resolved!

Internationalization and localization is a core part of WordPress and relevant for more than half of all users. That’s why this functionality belongs natively into WordPress core and not in a (canonical) plugin. Merging Preferred Languages into core would allow the fallback logic to run much closer to where translation loading happens, reducing the risk for bugs and 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 incompatibilities. Plus, the UI impact is minimal, as it simply expands an existing language dropdown with additional features.

Implementation Details

The UI is built using TypeScript and React and the @wordpress/* npm packages also used for Gutenberg. This makes for a consistent look & feel and will make it easy to integrate it into any revamped WordPress adminadmin (and super admin) UI. The back end parts were developed in such a way that merging them into core eventually is as straightforward as possible, so a patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. can be developed relatively quickly.

Preferred Languages has been tested in production websites over numerous years by thousands of users. It works in all major browsers supported by WordPress, follows 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) best practices, and gracefully falls back to the old single language dropdown if JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/. is disabled.

Contributors and Feedback

While I (@swissspidy) have been the lead developer of the plugin, valuable input and contributions have come from others in the community.

This is a proposal and is subject to revision based on your feedback. If you haven’t already tried out the plugin, please download and install it from 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/ or the comfort of your WordPress admin. You can review the current code and leave feedback at the project’s GitHub repository or in #core-i18n 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/..

All feedback will be collected over the next couple of weeks. After that, the received feedback will be discussed and next steps determined. The goal is to work on and land a patch quickly to ensure that the feature gets plenty of testing in WordPress 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..

Props to @ocean90 for reviewing this post.

#6-6, #feature-plugins, #feature-projects, #i18n, #merge-proposals, #polyglots, #preferred-languages

A Week in Core – February 19, 2024

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 February 12 and February 19, 2024.

  • 23 commits
  • 43 contributors
  • 81 tickets created
  • 13 tickets reopened
  • 88 tickets closed

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

Build/Test Tools

  • Ignore src/wp-content/fonts from version controlversion control A version control system keeps track of the source code and revisions to the source code. WordPress uses Subversion (SVN) for version control, with Git mirrors for most repositories.#60337
  • Remove more unnecessary direct dependencies – #59658
  • Remove unnecessary direct dependencies – #59658
  • Update several dependencies – #59658
  • Use assertSame() in WP_Query tests involving ::$max_num_pages property – #58683, #59655
  • Use assertSame() in get_comment_pages_count() tests – #58683, #59655

Bundled Themes

  • Twenty Nineteen: Update selectors used to change the primary color in the CustomizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings.#59922
  • Twenty Twenty-Four: Increase the color contrast of the Ember style variation – #60459
  • Support pullquote 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. typography options in Twenty Twenty-One – #57854

Canonical

  • Limit post types searched by redirect_guess_404_permalink()#59795
  • Rename admin_canonical_url 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 wp_admin_canonical_url#59545

Coding Standards

  • Allow $newlineEscape parameter in WP_Text_Diff_Renderer_inline::_splitOnWords()#59650

Docs

  • Various improvements and corrections to inline documentation – #59651

Editor

  • Check PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.1.12 for woff/woff2 mime types in WP_Font_Utils – 60536
  • Merge uses_context defined by block bindings sources with block types – #60525
  • Prevent PHP warning when parsing duotone hue values – #59496
  • Interactivity 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.: Skip instead of bail out if HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. contains SVG or MATH#60517
  • Interactivity API: Use string instead of object in data-wp-interactive attribute – #60542, #60356

General

  • Consistently cast return value to int in functions that use ceil()#58683
  • Further improve language in SimplePie code comments – #60247

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.

  • Prevent incorrect language dropdown entries when there are .l10n.php files – #59656, #60553

Media

  • Replace media icon images with SVG – #31352

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

  • Clarify documentation for methods and filters relating to REST API search endpoints – #59651

Props

Thanks to the 43 people who contributed to WordPress Core on Trac: @costdev (3), @shailu25 (3), @gziolo (3), @poena (3), @huzaifaalmesbah (3), @peterwilsoncc (2), @cbravobernal (2), @swissspidy (2), @sabernhardt (2), @jacobcassidy (1), @rahmohn (1), @mukesh27 (1), @westonruter (1), @dmsnell (1), @crstauf (1), @audrasjb (1), @manfcarlo (1), @francescocarlucci (1), @rajinsharwar (1), @Anlino (1), @richtabor (1), @itpathsolutions (1), @santosguillamot (1), @czapla (1), @thekt12 (1), @ironprogrammer (1), @afercia (1), @iseulde (1), @melchoyce (1), @joemcgill (1), @wonderboymusic (1), @ocean90 (1), @karmatosed (1), @boemedia (1), @bosskhj (1), @joedolson (1), @faisal03 (1), @ashikur698 (1), @kafleg (1), @hellofromTonya (1), @darshitrajyaguru97 (1), @harshgajipara (1), and @skyakash12 (1).

Congrats and welcome to our 3 new contributors of the week: @jacobcassidy, @francescocarlucci, @skyakash12 ♥️

Core committers: @swissspidy (8), @sergeybiryukov (5), @desrosj (3), @johnbillion (2), @hellofromtonya (2), @peterwilsoncc (1), @gziolo (1), and @joedolson (1).

#6-5, #core, #week-in-core

A Week in Core – February 12, 2024

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 February 5 and February 12, 2024.

  • 71 commits
  • 245 contributors
  • 82 tickets created
  • 11 tickets reopened
  • 82 tickets closed

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

  • Improve contrast and consistency of focus styles – #51870

Bundled Themes

  • Twenty Fifteen: Add top margin to the File 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. button styles – #58498
  • Twenty Nineteen: Add border-radius to avatarAvatar An avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. images in the editor – #59285
  • Twenty Nineteen: Correct line height for Button block – #58443
  • Twenty Nineteen: Restore transition property to a single line – #58443
  • Twenty Sixteen: Add border-radius to avatar images in the editor – #59253
  • Twenty Twenty-Four: Add missing translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. functions to text strings – #60298
  • Twenty Twenty-Four: Prefix the block pattern categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. name – #59839
  • Twenty Twenty-Three: Include Latin-extended characters in DM Sans font files – #59008
  • Twenty Twenty-Two: Prefix the pages block pattern category name – #59839
  • Twenty Twenty: Fix Table block default and custom border colors – #58022
  • Twenty Twenty: Scope .privacy-policy styles to the footer only – #60469
  • Improve focus outline in Twenty Twenty-Four – #60334
  • Cast font URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org functions to string for add_editor_style()#59704

Build/Test Tools

  • Fix 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. pulling local environment containers on Apple silicone – #59930
  • Generate a human-readable HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. coverage report – #60476
  • Make the props bot message shorter – #60417
  • Pin a specific commit for Hosting Test Reporter – #59647
  • Revert [57551]#59647
  • Unpin PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 7.4 from the test coverage workflow – #59647
  • Adjust the 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. key time in wp_scheduled_delete() tests – #59938

Canonical

  • Introduce admin_canonical_url 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.#59545

Coding Standards

  • Add missing fullstop to docblocks in wp-includes/vars.php#41877
  • Replace alias join() in WP_Font_Utils#60473

Editor

  • Add viewScriptModule handling to block.json metadata – #60233
  • Add wakeup magic method to the block bindings registry – #60282
  • Avoid double escaping on value passed for attribute in HTML 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.) processor
  • Expand Block Bindings for button block – #60481
  • Fix block style variation selector generation – #60453
  • Fix typo in FontUtils doc block – #59166
  • Improve code documentation for block bindings – #60282
  • Introduce WP_Block_Bindings_Source class – #60447
  • Make asset file optional for block scripts – #57234
  • Refactor block binding processing and attribute computation – #60282
  • Register the Google Font collection – #59166
  • Show the patterns page for classic themes – #58827
  • Update PHPDocPHPDoc (docblock, inline docs) for block bindings’s context arg – #59743
  • Update pattern overrides attribute format – #60456
  • Update the WordPress packages to 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/ 17.7RC1 – #60315
  • Block 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.: Inject hooked blocks into modified templates and parts – #59646
  • Blocks: Allow reading the script handle from asset files – #60485
  • Interactivity 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.: Integrate Server Directive Processing – #60356
  • Interactivity API: Remove empty file – #60356

Filesystem API

  • Fix typo in ftp_base::restore()#60497

General

  • Add an option to configure the site icon in general settings – #54370, #16434
  • Remove ableist language from code comments – #60247

HTML API

  • Add subclassed has_bookmark() and fix seek() – #60474
  • Join text nodes on invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid.-tag-name boundaries – #60385

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.

  • Add Translator comments for Planet URLs – #58010

Media

  • Update progress spinner position on small screens – #33049
  • enable control of progressive image output – #21668

Networks and Sites

  • Improve switch_to_blog() docblockdocblock (phpdoc, xref, inline docs)#60332

Permalinks

  • Detect Caddy web server support – #41877

Plugins

  • Store 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 deletion results in temporary option – #59433

Quick/Bulk Edit

  • Pre-fill category fields with their status – #11302

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 featured_media field to attachments endpoint – #41692
  • Improve error handling in REST meta fields – #48823
  • Introduce the necessary endpoints for the font library – #59166
  • Provide detailed error data in REST API response – #60014

Script Loader

  • Add a timezone offset display value to wp.date.setSettings – #60105
  • Improve translators comments for wp.date.setSettings in compat file – #60412
  • always output core block global styles after base global styles – #60280
  • Add deregister module function – #60463

Shortcodes

  • Always return an array in shortcode_parse_atts()#59249

Themes

  • Add ‘theme_files’ cache group to block pattern cache operations – #60120
  • update add_theme_support docblock – #60221

Toolbar

  • Add adminbar link for new sites in networknetwork (versus site, blog) installs – #41104

Upgrade/Install

  • Avoid update_option() calls during bootstrap – #60461, #60457, #60491
  • Upgrade/Install: Introduce Plugin Dependencies – #22316
  • Micro-optimizations for getting plugin_file in plugins loader 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.#60510
  • Remove unnecessary individual subfiles from $_old_files array – #58995

Users

  • Replace table tags for color palettes in profiles – #53157

Props

Thanks to the 245 (!!) people who contributed to WordPress Core on Trac: @gziolo (14), @mukesh27 (13), @swissspidy (13), @sabernhardt (13), @poena (12), @shailu25 (11), @huzaifaalmesbah (9), @youknowriad (8), @oglekler (7), @joedolson (7), @jorbin (7), @audrasjb (7), @spacedmonkey (6), @SergeyBiryukov (6), @dmsnell (6), @get_dave (6), @hellofromTonya (5), @afercia (5), @kebbet (5), @harshgajipara (5), @johnbillion (5), @costdev (4), @nicolefurlan (4), @jonsurrell (4), @czapla (4), @TimothyBlynJacobs (3), @karmatosed (3), @pbiron (3), @desrosj (3), @afragen (3), @azaozz (3), @luisherranz (3), @dingo_d (2), @mikeschroder (2), @andraganescu (2), @johnjamesjacoby (2), @rajinsharwar (2), @nidhidhandhukiya (2), @cbravobernal (2), @dd32 (2), @wildworks (2), @pooja1210 (2), @wasiur195 (2), @scribu (2), @ajmcfadyen (2), @peterwilsoncc (2), @pitamdey (2), @santosguillamot (2), @isabel_brison (2), @bernhard-reiter (2), @mcsf (2), @ocean90 (2), @aaronrobertshaw (2), @sadpencil (1), @cfinnberg (1), @viliamkopecky (1), @ecc (1), @rcorrales (1), @cvorko (1), @flixos90 (1), @joemcgill (1), @adamsilverstein (1), @_ck_ (1), @markoheijnen (1), @Japh (1), @pmeenan (1), @derekspringer (1), @buley (1), @ericlewis (1), @bahia0019 (1), @born2webdesign (1), @kushang78 (1), @timothyblynjacobs (1), @wonderboymusic (1), @dlh (1), @obenland (1), @jameskoster (1), @kjellr (1), @stacimc (1), @h71 (1), @krupajnanda (1), @jordesign (1), @monzuralam (1), @hrrarya (1), @fnpen (1), @mhshohel (1), @bedas (1), @jeremyfelt (1), @prionkor (1), @matveb (1), @benniledl (1), @jsnajdr (1), @mnydigital (1), @onemaggie (1), @luminuu (1), @pouicpouic (1), @ugyensupport (1), @jivygraphics (1), @sumitbagthariya16 (1), @kkmuffme (1), @talldanwp (1), @dartiss (1), @upadalavipul (1), @manfcarlo (1), @mayur8991 (1), @panchalhimani711 (1), @itpathsolutions (1), @thakordarshil (1), @Ankit-K-Gupta (1), @darshitrajyaguru97 (1), @pavelevap (1), @chasedsiedu (1), @helen (1), @joshcanhelp (1), @ubernaut (1), @Cyberchicken (1), @laumindproductscomau (1), @Marcoevich (1), @tomybyte (1), @thinkluke (1), @virtality-marketing-solutions (1), @Michalooki (1), @itecrs (1), @pannelars (1), @WHSajid (1), @samba45 (1), @Mte90 (1), @tomluckies (1), @soulseekah (1), @francina (1), @webcommsat (1), @balub (1), @sarathar (1), @glendaviesnz (1), @up1512001 (1), @zodiac1978 (1), @davidbinda (1), @westonruter (1), @retrofox (1), @joefusco (1), @colorfultones (1), @acosmin (1), @alh0319 (1), @beafialho (1), @javiercasares (1), @mmaattiiaass (1), @grantmkin (1), @oandregal (1), @ajlende (1), @ahoereth (1), @alanfuller (1), @alexkingorg (1), @amykamala (1), @anonymized_10690803 (1), @apeatling (1), @ashfame (1), @atimmer (1), @aristath (1), @batmoo (1), @beaulebens (1), @blobaugh (1), @bobbingwide (1), @boonebgorges (1), @brianhenryie (1), @chanthaboune (1), @chrisdavidmiles (1), @coolmann (1), @courane01 (1), @danielbachhuber (1), @davidperez (1), @Denis-de-Bernardy (1), @DJPaul (1), @dougal (1), @DrewAPicture (1), @ethitter (1), @filosofo (1), @georgestephanis (1), @giuseppemazzapica-1 (1), @goldenapples (1), @griffinjt (1), @husobj (1), @ideag (1), @jarednova (1), @jbobich (1), @jbrinley (1), @jltallon (1), @johnciacia (1), @joppuyo (1), @jsmoriss (1), @knutsp (1), @kraftbj (1), @kraftner (1), @kurtpayne (1), @lkraav (1), @logikal16 (1), @man4toman (1), @markjaquith (1), @matt (1), @mbijon (1), @megphillips91 (1), @mikeschinkel (1), @mordauk (1), @morehawes (1), @mrwweb (1), @mte90 (1), @mzaweb (1), @nacin (1), @norcross (1), @nvwd (1), @nwjames (1), @obliviousharmony (1), @paaljoachim (1), @pauldewouters (1), @pbaylies (1), @Philipp15b (1), @pogidude (1), @retlehs (1), @rmccue (1), @ryan (1), @sabreuse (1), @sc0ttkclark (1), @sereedmedia (1), @ShaneF (1), @shidouhikari (1), @soean (1), @stephenh1988 (1), @taylorde (1), @tazotodua (1), @threadi (1), @TJNowell (1), @tollmanz (1), @toscho (1), @tropicalista (1), @Viper007Bond (1), @westi (1), @whiteshadow (1), @williamsba1 (1), @wpsmith (1), @ZaneMatthew (1), @noisysocks (1), @kevin940726 (1), and @fabiankaegy (1).

Congrats and welcome to our 28 (!!) new contributors of the week: @sadpencil, @cfinnberg, @viliamkopecky, @ecc, @cvorko, @pmeenan, @derekspringer, @born2webdesign, @kushang78, @hrrarya, @fnpen, @mhshohel, @benniledl, @mnydigital, @up1512001, @alh0319, @anonymized_10690803, @blobaugh, @chrisdavidmiles, @giuseppemazzapica-1, @jltallon, @johnciacia, @logikal16, @pbaylies, @Philipp15b, @pogidude, @tropicalista, @whiteshadow ♥️

Core committers: @gziolo (11), @youknowriad (10), @sergeybiryukov (8), @audrasjb (7), @joedolson (7), @swissspidy (5), @desrosj (5), @spacedmonkey (3), @jorbin (3), @costdev (3), @hellofromtonya (2), @dmsnell (2), @isabel_brison (2), @adamsilverstein (1), @davidbaumwald (1), and @bernhard-reiter (1).

#6-5, #core, #week-in-core

A Week in Core – February 5, 2024

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 January 29 and February 5, 2024.

  • 66 commits
  • 117 contributors
  • 79 tickets created
  • 8 tickets reopened
  • 56 tickets closed

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

  • 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): Use the default cursor style for labels and disabled form controls – #59733

Build/Test Tools

  • Introduce Props Bot workflow – #60417
  • Mock 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 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. response in WP_REST_Plugins_Controller_Test#59647
  • Pass a token to the Codecov action – #59658
  • Some improvements to the Props Bot workflow – #60417
  • Test against MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com/. 8.3 – #59779
  • Update the codecov/codecov-action action – #59658
  • Update third-party 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/. action – #59805
  • Remove redundant unregister call in 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. bindings tear down – #60282

Bundled Themes

  • Twenty Eleven: Fix typo in twentyeleven_widgets_init() description – #60383
  • Twenty Fifteen: Fix typo in css/blocks.css#60383
  • Twenty Twenty-Three: Rename Comments template part – #56999

Coding Standards

  • Remove unnecessary access and internal annotations from two functions in WP_REST_Templates_Controller – #60358
  • Rename the $ID parameter to $post_id in trackback()#59650
  • Rename the $expires_offset variable in cache_javascript_headers()#59650
  • Update PHPCSPHP Code Sniffer PHP Code Sniffer, a popular tool for analyzing code quality. The WordPress Coding Standards rely on PHPCS. to version 3.8.1 – #60279
  • Use strict comparison for functions lookup in plugin/theme editors – #60415
  • Use strict comparison in wp-admin/update-core.php#58061, #60415

Docs

  • Fix typo in do_robots() docblockdocblock (phpdoc, xref, inline docs)#60405

Editor

  • Add Block Bindings API helpers – #60282
  • Add allowed_blocks field to block registration and 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/.#60403
  • Add viewStyle property to block.json for frontend-only block style – #59673
  • Add deprecated functions from interactivity core blocks – #60380
  • Add registry for block binding sources – #60282
  • Add the Block Bindings API – #60282
  • Fix PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher warning in Layout block support – #60327
  • Fix 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. font settings in unit testunit test Code written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression.#60341
  • Fix Theme.json font settings unit test – #60341
  • Refactor the way block bindings sources are handled – #60282
  • Remove shadow support via direct attribute – #60377
  • Sanitize nested array in theme.json properly – #60360
  • Update WordPress packages to 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/ 16.7 RC3 – #60315
  • Update the WordPress packages to the Gutenberg 16.7 RC2 version – #60315
  • Update the minimum compatible version of Gutenberg – #60315
  • fix small typos in block bindings API docblocks – #60282, #60386
  • introduce dimensions.aspectRatio block support – #60365
  • reduce specificity of block style variation selector – #60312

General

  • Add tests for array_is_list polyfill added in r57337#55105

HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. API

  • Fix CDATA lookalike matching invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. CDATA – #60406
  • Fix splitting single text node – #60385
  • Fix typo setting the wrong self-closing flag
  • Fix void 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.) nesting with next_token – #60382
  • Reset parser state after seeking to bookmark – #60428
  • Test cleanup – #59647

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

  • Ensure cookie names are cast to strings – #58566

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.

  • Add missing space after foreach keyword – #59656
  • Add type declaration to new method missed in [57518]#59656
  • Delete .l10n.php files when deleting a theme – #59656
  • Ensure .l10n.php files are deleted when upgrading language packs – #59656
  • Fix plural forms parsing in WP_Translation_File#59656
  • Improve singular lookup of pluralized strings – #59656
  • Improve singular lookup of pluralized strings – #59656
  • Load new translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. library in wp_load_translations_early()#59656
  • Revert [57386] pending further investigation – #59656
  • Support loading .l10n.php translation files on their own – #59656

Upgrade/Install

  • When populating options, maybe_serialize instead of always serialize

Media

REST API

  • Add route for single styles 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.#59810
  • Support assigning terms when creating attachments – #57897

Script Loader

  • Remove unused WP_Scripts::get_unaliased_deps() method – #60438
  • Use a global variable in wp_script_modules()#56313
  • Add import map polyfill for older browsers – #60348

Upload

  • Fallback to PclZip to validate ZIP file uploads – #60398
  • Check for and verify ZIP archives

Props

Thanks to the 117 (!) people who contributed to WordPress Core on Trac: @mukesh27 (12), @swissspidy (11), @gziolo (7), @peterwilsoncc (6), @jonsurrell (6), @costdev (5), @jorbin (5), @dmsnell (4), @youknowriad (4), @santosguillamot (4), @desrosj (4), @talldanwp (4), @czapla (4), @luisherranz (4), @azaozz (3), @joemcgill (3), @lgladdy (3), @sc0ttkclark (3), @artemiosans (3), @fabiankaegy (3), @shailu25 (3), @cbravobernal (3), @get_dave (3), @jeffpaul (2), @johnbillion (2), @kevin940726 (2), @joedolson (2), @dharm1025 (2), @harshgajipara (2), @isabel_brison (2), @audunmb (1), @britner (1), @cdevroe (1), @colorful-tones (1), @courane01 (1), @endymion00 (1), @feastdesignco (1), @halounsbury (1), @jsandtro (1), @karinclimber (1), @kevincoleman (1), @koesper (1), @maartenbelmans (1), @mathewemoore (1), @melcarthus (1), @mujuonly (1), @nerdpressteam (1), @olegfuture (1), @otto42 (1), @room34 (1), @sayful (1), @schutzsmith (1), @stephencronin (1), @svitlana41319 (1), @tnolte (1), @tobiasbg (1), @vikram6 (1), @welaunchio (1), @wpfy (1), @viralsampat (1), @adamsilverstein (1), @lukefiretoss (1), @ayeshrajans (1), @navjotjsingh (1), @Tyrannous (1), @jb510 (1), @gregbenz (1), @nickpagz (1), @JavierCasares (1), @yguyon (1), @mamaduka (1), @upadalavipul (1), @jsnajdr (1), @afercia (1), @Chouby (1), @dd32 (1), @pento (1), @noisysocks (1), @chrisdavidmiles (1), @wpscholar (1), @annezazu (1), @chanthaboune (1), @Chrystl (1), @codepo8 (1), @oglekler (1), @nicolefurlan (1), @antpb (1), @syamraj24 (1), @wildworks (1), @madhudollu (1), @westonruter (1), @mikachan (1), @poena (1), @nosilver4u (1), @darssen (1), @kraftbj (1), @engahmeds3ed (1), @barry-hughes (1), @schlessera (1), @aaronrobertshaw (1), @mmaattiiaass (1), @ramonopoly (1), @gaambo (1), @andrewserong (1), @flixos90 (1), @xknown (1), @tykoted (1), @afragen (1), @hellofromtonya (1), @ocean90 (1), @amieiro (1), @Dharm1025 (1), @Ankit-K-Gupta (1), @tanjimtc71 (1), @timothyblynjacobs (1), @spacedmonkey (1), @jrf (1), and @antonvlasenko (1).

Congrats and welcome to our 25 (!!) new contributors of the week: @audunmb, @cdevroe, @endymion00, @feastdesignco, @halounsbury, @kevincoleman, @koesper, @maartenbelmans, @mathewemoore, @melcarthus, @nerdpressteam, @olegfuture, @room34, @sayful, @svitlana41319, @vikram6, @welaunchio, @navjotjsingh, @gregbenz, @nickpagz, @chrisdavidmiles, @codepo8, @nosilver4u, @darssen, @barry-hughes ♥️

Core committers: @swissspidy (18), @youknowriad (11), @sergeybiryukov (7), @gziolo (7), @desrosj (6), @dmsnell (6), @peterwilsoncc (2), @adamsilverstein (2), @isabel_brison (2), @jorbin (2), @afercia (1), @joedolson (1), and @jorgefilipecosta (1).

#6-5, #core, #week-in-core

A Year in Core – 2023

Happy new year, everyone! Here’s some aggregate data for 2023 about WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. contribution on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress..

Please note:

  • These data only include code contributions to WordPress codebase, not contributions on 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/ repositories such as 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/.
  • The raw data for this post are available on this public spreadsheet. You might find that much easier to read if you have low vision or colorblindness; the graphics below are a snapshot pulled together to include as much information as possible in this blogpost, but they are hard to make accessible to everyone.
  • You can also compare these stats with last year’s data and data from 2021.
  • All the links for the graphics below open a new tab to display them in full size.

General Trac overview

In 2023, the WordPress Core team shipped 2211 commits (2597 in 2022). 2751 tickets were opened, 2545 tickets were closed, and 365 were reopened.

Also, 1079 people contributed to WordPress source code using Trac (988 in 2022), and 472 people made their very first contribution to WordPress Core ♥️ (398 in 2022).

JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberTotal
Commits14826517984174246209173250288108872211
Tickets closed1812972181561792592112772392681481122545
Tickets reopened253636192540422935402810365
Tickets created1852342081882082552563102502702121752751
New contributors18912318257451317546128472
Contributors13729515587150279217182295249111931079
This chart shows the number of commits per month in 2023, and the number of closed, reopened and created tickets per month. It also shows the number of contributors per month in 2023. It can be scrolled horizontally.

Check out the Trac timeline in the graphs below:

2023 Core Trac tickets by month (opens in a new tab)
2023 Core commits by month (opens in a new tab)

Here’s how many props and new contributors the Core project had per month. The most prolific months were February and September with 295 contributors each, followed by June and October. 42 of the new contributors received their first props on a commit related to the Twenty Twenty-Four theme.

2023 WordPress Core contributors by month (opens in a new tab)

Components activity

How did 2023’s commits break out by Core Component?

The most prolific components were:

  • Editor with 284 commits (12.8% of all listed commits)
  • Build/Test Tools with 265 commits (12% of all listed commits)
  • Docs with 188 commits (8.5% of all listed commits)
  • Coding Standards with 154 commits (7% of all listed commits)
  • Bundled Themes with 130 commits (5.9% of all listed commits)
  • Then came MediaHelp/About, Code Modernization (which is not an official component), Themes, Administration, General, HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. 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., Internationalization, 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/. and Upgrade/Install. The other components each had fewer than 30 commits this year.

Contributors data retrieved from 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/ profiles

The data below comes from matching contributors’ usernames, as mentioned in Trac props, with their profiles on WordPress.org.

One caveat: this ignores usernames that did not match a profile on dotorg, plus any that had blank or unusable country/company information (“The Universe” or “Unicorn land” are not known countries 🙂).

Contributions by country

The next graph shows the number of props received by country. The top eight countries, based on the number of props received, are these:

  • United States with 2062 contributions (1255 in 2022)
  • Russia with 795 contributions (1152 in 2022)
  • India with 683 contributions (317 in 2022)
  • France with 680 contributions (739 in 2022)
  • Australia with 611 contributions (386 in 2022)
  • United Kingdom with 471 contributions (216 in 2022)
  • Ireland with 403 contributions
  • Bangladesh with 340 contributions (145 in 2022)
Contributions by country (opens in a new tab)

Contributors (people) by country

In 2023, people from at least 62 countries contributed to WordPress Core (57 countries in 2022).

Here are the top eight countries by number of contributors:

  • United States with 164 people (152 in 2022)
  • Bangladesh with 105 people (only 43 in 2022)
  • India with 93 people (77 in 2022)
  • United Kingdom with 31 people (38 in 2022)
  • France with 30 people (22 in 2022)
  • Canada with 25 people (17 in 2022)
  • Germany with 21 people (25 in 2022)
  • Netherlands with 21 people (23 in 2022)
  • Spain with 19 people (12 in 2022)
Contributors by country (opens in a new tab)

Contributions by company

In 2023, people from at least 286 companies contributed to WP Core.

These companies (well, their employees) each contributed to more than 100 commits:

  • Automattic with 1770 contributions (866 in 2022)
  • Yoast with 985 contributions (1452 in 2022)
  • 10up with 904 contributions (501 in 2022)
  • Whodunit with 561 contributions (676 in 2022)
  • Google with 404 contributions (130 in 2022)
  • Bluehost with 238 contributions (226 in 2022)
  • XWP with 224 contributions (14 in 2022)
  • Human Made with 177 contributions (126 in 2022)
  • Advies en zo with 143 contributions (220 in 2022)
  • Dream Encode with 128 contributions (124 in 2022)
  • Emilia Capital with 123 contributions
  • Accessible WD with 120 contributions (53 in 2022)
  • GoDaddy with 111 contributions (42 in 2022)
Contributions by company (opens in a new tab)

Contributors (people) by company

A huge number of companies have only one contributor—or very few contributors. The exceptions are Automattic, with 108 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. on Trac in 2023, WPDeveloper (39 contributors), 10up with 25 contributors, AuthLab (21 contributors), rtCamp (17 contributors), Awsm (12 contributors), Human Made (12 contributors), Multidots (12 contributors), and Yoast (10 contributors). Only these 9 companies had at least 10 people credited on Trac in 2023.

Contributors by company (opens in a new tab)

What did 2022 hold for Core Committers?

39 Core Committers committed code to the WordPress SVNSVN Subversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase. repository this year (32 in 2022):

@sergeybiryukov (552), @audrasjb (413), @desrosj (148), @hellofromtonya (134), @joedolson (93), @isabel_brison (88), @spacedmonkey (88), @flixos90 (87), @peterwilsoncc (82), @davidbaumwald (77), @bernhard-reiter (67), @jorbin (44), @johnbillion (43), @joemcgill (39), @swissspidy (30), @azaozz (27), @costdev (25), @westonruter (25), @karmatosed (24), @gziolo (22), @oandregal (15), @ryelle (15), @adamsilverstein (9), @danielbachhuber (9), @jorgefilipecosta (8), @zieladam (7), @kadamwhite (6), @youknowriad (6), @antpb (4), @drewapicture (4), @mikeschroder (4), @afercia (3), @timothyblynjacobs (3), @clorith (2), @dd32 (2), @helen (2), @ocean90 (2), @johnjamesjacoby (1), and @whyisjake (1).

Of the 2211 commits, 555 (25%) were made by people working at Yoast, 413 (19%) from people working at Whodunit, 399 (18%) from employees of Automattic, followed by Google (151 commits), Bluehost (148 commits) and 10up (123 commits).

Core Committers by company (opens in a new tab)

Automattic is the only company with more than 10 active Core Committers, and 12 of them committed code in 2023. Google has 4 people allowed to commit code to WordPress, followed by 10up with 3 Core Committers.

Worth noting that 15 of the 39 active committers come from the US, which represents 38% of the Core Committers squad. Australia, Canada, Italy, Poland and United Kingdom each had 2 committers.

More than 30% of the commits were handled by committers located in the United States, 26% by committers located in Russia, and 19% by committers located in France.

Core Committers by country (opens in a new tab)

Sponsorship

In 2023, 21.6% of the contributors and 23.1% of the committers indicated that a company sponsors their contributions.

Sponsorship of contributors in 2023 (pie chart opens in a new tab)
Sponsorship of committers in 2023 (pie chart opens in a new tab)

Many thanks to @audrasjb for help collecting the 2023 data and for adding several graphics.

#contributions, #contributors, #team-update, #week-in-core, #year-in-core

Two Weeks in Core – September 4, 2023

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 August 21 and September 4, 2023.

  • 75 commits
  • 150 contributors (!)
  • 25 new contributors (!)
  • 129 tickets created
  • 13 tickets reopened
  • 117 tickets closed

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

  • Escape post type output as field attribute – #59190

Build/Test Tools

  • Avoid doing copy:dynamic when running grunt watch when using --dev option – #59196
  • Change the version of Node.js in the Codespaces container – #56658
  • Compare results in performance measurement workflow – #58358, #58359
  • Enable running the tests on PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.3 – #59231
  • Ensure database containers are prepared for commands – #30462, #58867
  • Expand database testing to account for all supported versions and types – #30462
  • Implicitly pass secrets to the called workflow – #30462
  • Merge pre-commit changes missed in [56439]#30462
  • Revert unintentional .env change in [56449]#56594
  • Tests_Formatting_MakeClickable should use data providors – #57660
  • Correct uses of ReflectionProperty::setValue() for static properties – #59231
  • Fix coding standards for Tests_Admin_wpUserSearch#41125
  • Remove webfonts tests – #59165

Bundled Theme

  • Twenty Nineteen: Improve social media icon dimension attributes – #45950
  • Ensure that pull quotes are able to use the correct font size – #57854

Coding Standards

  • Remove unused global variables in various /wp-admin/includes/ files – #59254
  • Use strict comparison in wp-includes/class-wp-hook.php#58831
  • Use strict comparison in wp-includes/class-wp-widget.php#58831
  • Use strict comparison in wp-includes/ms-files.php#58831
  • Use strict comparison in wp-includes/ms-site.php#58831

CustomizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings.

  • use the correct X-Robots-Tag 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.#58865

Database

  • Improve the documentation for various methods in the wpdb class – #58833
  • Remove support for the mysql extension – #59118

Docs

  • Add missing param description in WP_Comment class – #58890
  • Clarify post_date_column_time 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 – #59029
  • Correct default post type in page_template_dropdown() docblockdocblock (phpdoc, xref, inline docs)#58972
  • Docblock improvements in _deprecated_class() function, as per docblocks standards – #58833
  • Fix typo in a translator comment in _deprecated_class()#58833
  • Improve PHPCSPHP Code Sniffer PHP Code Sniffer, a popular tool for analyzing code quality. The WordPress Coding Standards rely on PHPCS. comments general consistency – #58833
  • Use third-person singular verbs in various function descriptions, as per docblocks standards – #58833
  • Wrap inline @see tags in curly braces – #58858

Editor

  • Add relative time strings for the wp-date inline script output – #59219, #47373
  • Don’t use fluid layout value in typography – #58754
  • Ensure main 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. is entered for singular content in 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 – #58154
  • Optimize wp_get_block_css_selector to remove array_merge calls for better performance – #59178
  • Preserve block style variations when securing theme – #59108
  • Introduce font-face styles generator and printer – #59165

External Libraries

  • Update jQuery to version 3.7.1 – #59227
  • Upgrade PHPMailer to version 6.8.1 – #59238 – #58833

General

  • Fix coding standards for translatable _deprecated_class() message strings – #41125
  • Introduce a _deprecated_class() function – #41125
  • Replace two esc_url_raw() calls in core with sanitize_url()#59247
  • Use regular core button styles for page header actions – #41986

HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. 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.

  • Stop processing HTML when encountering unsupported markup – #59167
  • Update WP_Http class to avoid PHP deprecation warnings – #58876

Help/About

  • Match icon and text in Help for bulk edit button – #58785

Login and Registration

  • Improve test coverage for sign on related functions – #36476

Media

  • Add a filter to the get_available_post_mime_types() function to allow overriding its database query – #52759
  • Prevent warning if shortcodeShortcode A shortcode is a placeholder used within a WordPress post, page, or widget to insert a form or function generated by a plugin in a specific location on your site. is used without attributes – #59206
  • Remove unused $is_IE and $is_opera globals in media_upload_form()#59254

Menus

  • Fix proximity of controls to Save and Delete menus – #56594
  • Revert unintentional changes in [56449]#56594

Options, 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. APIs

  • Introduce prime_options() to load multiple options with a single database request – #58962
  • Introduce wp_set_option_autoload_values()#58964

Performance

  • Add fallback for $script_uri to prevent firing plugins_url() unnecessarily – #59181

Plugins

  • Correctly display spaces in new plugins search results – #59143

Posts, Post Types

  • Avoid redundant SQL query in get_pages() – #59224
  • Reinstate missing sort_column options in get_pages() – #59226
  • Remove redundant function calls in get_body_class()#43661

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

  • Remove misleading comment in WP_REST_Blocks_Controller->get_item_schema – #59193

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.

  • Add missing escaping function for $post_edit_link in wp-admin/revision.php#59141

Rewrite Rules

  • Prevent stampedes when flush_rewrite_rules() is called – #58998

Site Health

  • Show correct debug value for file uploads – #58737
  • fix check name used for REST API permission checks – #59236

Upgrade/Install

  • Add missing escaping function for get_option( 'home' ) in upgrade.php#59199
  • Remove unused globals in core_upgrade_preamble()#59254

Upload

  • Add a MIME type exception for .docx generated by Google Docs – #57898
  • Correct duplicate MIME type for .xlsx files generated by Google Docs – #57898

Users

  • Call add_user_meta() instead of update_user_meta() when adding metadata to a new user – #59212
  • Properly deprecate both constructors in WP_User_Search#41125
  • Remove unused wpdb global in check_password_reset_key()#59185

Widgets

  • Improve performance of has_content method in WP_Widget_Media_Gallery class – #58757

XML-RPC

  • Remove unused wpdb global in wp_xmlrpc_server::mw_newMediaObject()#59185

Props

Thanks to the 150 (!) people who contributed to WordPress Core on Trac last week:

@mukesh27 (14), @costdev (11), @sergeybiryukov (10), @joemcgill (8), @flixos90 (7), @jrf (7), @poena (6), @aristath (5), @afercia (5), @upadalavipul (5), @spacedmonkey (5), @rajinsharwar (4), @desrosj (4), @azaozz (4), @Presskopp (4), @jorbin (3), @oglekler (3), @ramonopoly (3), @swissspidy (3), @david.binda (3), @westonruter (2), @hellofromTonya (2), @oandregal (2), @boonebgorges (2), @tabrisrp (2), @gziolo (2), @daxelrod (2), @johnbillion (2), @hztyfoon (2), @davidbaumwald (2), @sabernhardt (2), @jeffpaul (2), @nidhidhandhukiya (2), @niravsherasiya7707 (1), @michelleblanchette (1), @dhruvishah2203 (1), @matthewfarlymn (1), @elrae (1), @DrewAPicture (1), @rmccue (1), @ohryan (1), @wvega (1), @ahardyjpl (1), @nekojonez (1), @dilipbheda (1), @TobiasBg (1), @Synchro (1), @aslamdoctor (1), @maltfield (1), @szepeviktor (1), @bvreeman22 (1), @johnregan3 (1), @johnjamesjacoby (1), @iammehedi1 (1), @jordanpak (1), @adhun (1), @nithi22 (1), @huzaifaalmesbah (1), @deepakvijayan (1), @zunaid321 (1), @olliejones (1), @laurelfulford (1), @maxinacube (1), @l1nuxjedi (1), @pento (1), @netweb (1), @nacin (1), @crstauf (1), @armondal (1), @tahmidulkarim (1), @crunnells (1), @TimothyBlynJacobs (1), @JordanPak (1), @emailjoey (1), @melchoyce (1), @michaelarestad (1), @danieltj (1), @helen (1), @viralsampat (1), @adamsilverstein (1), @iCaleb (1), @maciejmackowiak (1), @archon810 (1), @rcorrales (1), @varjodesigns (1), @jivygraphics (1), @whyisjake (1), @90lines (1), @sc0ttkclark (1), @jakariaistauk (1), @djcowan (1), @arena (1), @askdesign (1), @bph (1), @bradley2083 (1), @colorfultones (1), @dingo_d (1), @domainsupport (1), @annezazu (1), @dryanpress (1), @elmastudio (1), @francina (1), @garrett-eclipse (1), @gigitux (1), @grantmkin (1), @antonvlasenko (1), @andraganescu (1), @ironprogrammer (1), @Michi91 (1), @youknowriad (1), @jastos (1), @aurooba (1), @dsas (1), @jonoaldersonwp (1), @grapplerulrich (1), @jb510 (1), @annashopina (1), @soean (1), @wildworks (1), @zaguiini (1), @winterstreet (1), @mujuonly (1), @mi5t4n (1), @audrasjb (1), @simison (1), @mikeschroder (1), @manzoorwanijk (1), @adrianduffell (1), @ipajen (1), @dmsnell (1), @skorasaurus (1), @shiloey (1), @jeremyyip (1), @mburridge (1), @jffng (1), @joostdevalk (1), @jorgefilipecosta (1), @juanmaguitar (1), @mamaduka (1), @matveb (1), @mitogh (1), @scruffian (1), @ndiego (1), @ntsekouras (1), @ocean90 (1), @paaljoachim (1), @pagelab (1), @peterwilsoncc (1), @priethor (1), and @mattkeys (1).

Congrats and welcome to our 25 (!) new contributors of the week: @niravsherasiya7707, @michelleblanchette, @matthewfarlymn, @wvega, @ahardyjpl, @aslamdoctor, @maltfield, @bvreeman22, @iammehedi1, @jordanpak, @maxinacube, @l1nuxjedi, @JordanPak, @emailjoey, @varjodesigns, @jivygraphics, @90lines, @djcowan, @askdesign, @Michi91, @jastos, @winterstreet, @mi5t4n, @adrianduffell, @shiloey ♥️

Core committers: @sergeybiryukov (15), @audrasjb (13), @johnbillion (6), @desrosj (5), @swissspidy (4), @drewapicture (4), @jorbin (3), @peterwilsoncc (3), @joedolson (3), @joemcgill (3), @flixos90 (2), @isabel_brison (2), @hellofromtonya (2), @timothyblynjacobs (1), @davidbaumwald (1), @antpb (1), @kadamwhite (1), @spacedmonkey (1), @westonruter (1), @adamsilverstein (1), @bernhard-reiter (1), @costdev (1), and @whyisjake (1).

#6-4, #core, #week-in-core

What’s new in Gutenberg 16.6? (06 September)

“What’s new 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/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Site Editor project (formerly called Full Site Editing).

Gutenberg 16.6 has been released and is available for download!

This latest release comes packed with improvements and bugfixes, including an 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 List View in the post editor, introducing a horizontal scrollbar for heavily nested list views, a fix for the Cover 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. on Safari on iPad, addressing an issue where images with a “Fixed background” were zoomed in excessively, and more!

Table of Contents

  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-inserted blocks.
  2. Captured toolbars.
  3. Changelog.

Block 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., formerly known as Auto-inserted blocks

On activation, plugins are now equipped with the capability to auto-insert blocks, enhancing the integration and automation between plugins and the Gutenberg editor. Early versions of this experiment were called Auto-inserted blocks, but after some discussion, they have now been dubbed Block hooks. (#52969, #54029, #54024, #54147)

Captured toolbars for an easier editing experience

Toolbars for child blocks are now seamlessly attached to their parent blocks, offering a more intuitive and organized editing experience. This feature is currently supported for Navigation, List, and Quote blocks. (#53699, #53697)

Other Notable Highlights:

  • Make mid size parameter settable for Query Pagination block. (#51216)
  • Add keyboard shortcut for duplicating blocks. (#53559)
  • Add toggle list view command in site editor. (53983)

Changelog

Features

Interactivity 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 Slot and Fill directives. (53958)
  • Query block: Client-side pagination. (53812)
  • Update data-wp-bind directive logic. (54003)
  • Query block: Move “Enhance pagination” toggle under Settings. (54198)

Enhancements

  • Bundle ObserveTyping within the BlockList component. (53875)
  • Default appender: Hide the dashed indicator until ancestor is selected. (53761)
  • Register the block editor keyboard shortcuts automatically when using BlockEditorProvider. (53910)
  • [Commands]: Add toggle list view command in site editor. (53983)

Components

  • Bundle SlotFillProvider within BlockEditorProvider. (53940)
  • Make the Popover.Slot optional. (53889)
  • Popover: Update @floating-ui to latest version, remove custom fix for iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. positioning and scaling. (46845)
  • AlignmentMatrixControl: Replace act() with userEvent. (53703)
  • ProgressBar: Add transition to determinate indicator. (53877)

Block Library

  • Blocks: Move bootstrapped block types to Redux state. (53807)
  • Capture toolbars in navigation block. (53697)
  • Content Block: Change placeholder and end-to-end test to refer to Content block. (53902)
  • Make mid size parameter settable for Query Pagination block. (51216)

Block Editor

  • Capture toolbars in quote block. (53699)
  • Improve writing flow for lists by capturing list item toolbars. (53306)
  • RichTextValue: Typescript Adjustment. (54002)

Typography

  • Font Face: Prepare for merge into CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. (53858)
  • Renames “Fonts Library” to “Font Library”. (53780)

Post Editor

  • Edit Post: Use hooks instead of HoCs in TaxonomyPanel. (53773)

List View

  • Add keyboard shortcut for duplicating blocks. (53559)

Patterns

New APIs

Interactivity API

  • Router with region-based client-side navigation. (53733)

Bug Fixes

  • Add missing aria roles for block locking toolbar and menu buttons. (53734)
  • Block Editor: Fix cleanup in the ‘useNavModeExit’ hook. (53795)
  • Command Palette: Fix crash on block-related commands. (53923)
  • Date: Add relative time translations for moment.js. (53931)
  • Date: Update translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. domains for strings to be translatable. (53995)
  • Iframe: Set character encoding to utf-8. (53519)
  • Replace horizontal ellipsis icon with vertical ellipsis icon. (52731)
  • Toggle Distraction free mode mode based on compatibility. (54030)
  • Warning: Introduce SCRIPT_DEBUG to make the package compatible with webpack 5. (50122)
  • [Commands]: Fix move to command condition for registering. (54049)
  • [Commands]: Fix block editor commands availability. (53994)
  • [Format library]: Fix language popover position. (53841)

Block Library

  • Add init.js module for the Footnotes block. (53763)
  • Adding center align css for social icon issue. (43120)
  • Cover block: Fix exception when adding video background. (53961)
  • List View: Allow replacing template part when a block isn’t selected. (53757)
  • Post Navigation Link: Remove unnecessary space between arrows and label. (53572)
  • Search block: Fix width input field. (53952)
  • Simplify check for no posts in query-no-results block. (53772)
  • Site Logo: Remove line-height for the anchor element. (53909)

Components

  • Always render the fallback Popover anchor within the Popover’s parent element. (53982)
  • Fix the cleanup method for SandBox. (53796)
  • PaletteEdit: Fix component height. (54000)

Post Editor

  • Edit Post: Fix tab border conflicts in the Document Overview panel. (53711)
  • EditPostPreferencesModal: Fix intermittently failing tests. (53814)
  • getInsertionPoint: Fix type check for the state value. (53793)

npm Packages

  • Workflow: Run Learn directly from 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/ action when publishing to npm targeting WP core. (53762)
  • Workflows: Fix issues with the npm publishing workflow when using locally. (53565)

Themes

  • Command Palette: Proper handling of page/post links in all themes. (53718)
  • Fix 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. bugs by correctly relying on the main query and removing problematic workaround. (49904)

Block Editor

  • Fix: Indicator style when block moving mode. (53972)

Icons

  • Fix invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. namespaces. (53955)

Patterns

  • Disable the preview option button when editing. (53913)

Global Styles

  • Gallery: Re-enable block spacing at block level while still hiding in global styles. (53900)

Layout

  • BlockList: Ensure element styles (and svg) are always appended at the end of the document. (53859)

Interactivity API

  • Add “supports.interactivity” to Image block. (53850)

Style Variations

  • Block Styles: Fix misplaced preview popover on RTL site. (53726)

List View

  • Recalculate window list when expanded state changes (fix logic for long nested lists). (53716)

Widgets Editor

  • Block 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.: Fix content cutoff in the keyboard shortcut modal. (53638)

Rich Text

  • Fix cleanup in useRemoveBrowserShortcuts. (52225)

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)

  • Edit site: Add missing label to post status password protected input field. (52885)
  • [a11yAccessibility 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)] Fix: Aria-haspop, aria-expanded attributes on the link format button. (53691)

Site Editor

  • Add missing aria roles to the ‘Create template part’ menu item. (53754)
  • Unify the delete button style in the dropdown menu with red. (52597)

Block Library

  • Add missing aria roles to the ‘Replace template part’ menu item. (53755)

Patterns

  • Add missing aria roles to the ‘Create pattern’ menu item. (53739)

List View

  • [a11y] Fix: Aria-haspop and aria-expanded attributes on list view button. (53693)

Block Editor

  • [a11y] Fix: Aria-haspop and aria-expanded attributes on the inserter button. (53692)

Performance

  • Revert “Switch performance tests to Playwright (#52022)”. (53741)
  • StartPageOptions: Load and parse patterns only after establishing the need for them. (53673)
  • Switch performance tests to Playwright: Take 2. (53768)

Experiments

Block API

  • Auto-inserting blocks: Add block inspector panel. (52969)
  • – Auto-inserting blocks: Add block icon to block inspector panel toggles. (54029)
  • Auto-inserting blocks: Remove toggle if block is present elsewhere. (54024)
  • Rename “auto inserting blocks” to “block hooks”. (54147)

Documentation

  • Add juanmaguitar as codeowner of /packages/interactivity/docs. (53845)
  • Add new How-to Guide for enqueueing assets in the Editor. (53828)
  • Adds example for useBlockProps hook. (53646)
  • Adds explanatory text to view.js template. (53870)
  • Clarification for parent and ancestor hierarchical relationships. (53855)
  • Docs: Extend the information about using render with block.json. (53973)
  • Docs: Remove duplicate sections from FAQ page. (53830)
  • Document the naming convention for block-library PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher functions. (53777)
  • Fix ‘lerna’ links in the release documentation. (53770)
  • Fix typo in code sample for Interactivity API. (53916)
  • MenuItem: Add Storybook stories. (53613)
  • Shortcut: Add Storybook stories. (53627)
  • Storybook: Add back subcomponents to props table. (53751)
  • Storybook: Fix default source visibility. (53749)
  • Storybook: Show main story before description. (53753)
  • Update local instructions on the dev env documentation. (53924)
  • Update the Block Variations API doc. (53817)
  • Update to node 16 and npm 8 in the getting started with code contribution doc. (53912)
  • docs: Fix report-flaky-test link. (53848)

Code Quality

  • Components: Update Popover per reviews. (53907)
  • Edit Site: Rename CanvasSpinner to CanvasLoader. (53728)
  • Enforce valid function names in the packages/block-library/src//.php files. (53438)
  • Fonts Library: Update properties name from snake case to camel case to match the rest of the properties. (53746)

Block API

  • Auto-inserting blocks: Remove obsolete TODO, fix 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/. field description. (54208)

Post Editor

  • Editor: Fix the ‘useSelect’ warning in the ‘useIsDirty’ hook. (53759)
  • Fix browser console error when changing device preview mode. (53969)
  • Refactor latest content selectors in ‘CopyContentMenuItem’ components. (53676)

Components

  • Remove unnecessary utils. (53679)
  • SlotFill: Refactor <Slot bubblesVirtually />. (53272)
  • Storybook: Update TypeScript types. (53748)

List View

  • Fix warning error when the gallery block has the same image URLs. (53809)

Typography

  • Font Face API: Use gutenberg_get_global_settings instead of private API. (53805)

Tools

  • Try: Change PR label enforcer automation not to work on draft PRs by default. (53417)

Testing

  • Attempt to fix intermittent end-to-end test failure. (53905)
  • Fonts Library: Test improvements. (53702)
  • Make fonts test files use Core approach. (53856)
  • Migrate shortcut help end-to-end tests to Playwright. (53832)
  • Relocates Font Face and Fonts Library PHP files into Core’s fonts directory. (53747)
  • ColorPalette: Refine test query. (53704)
  • end-to-end Playwright Utils: Automatically detect canvas type. (53744)
  • test: Automate mobile editor tests. (53991)

Build Tooling

  • Update Jest to latest version, and use optimized JSDOM. (53736)

Plugin

  • 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. themes is_block_theme collection param from core. (53846)

First time contributors

The following PRs were merged by first time contributors:

  • @JEverhart383: Fix typo in code sample for Interactivity API. (53916)
  • @krokodok: Make mid size parameter settable for Query Pagination block. (51216)
  • @mklute101: Update local instructions on the dev env documentation. (53924)

Contributors

The following contributors merged PRs in this release:

@afercia @andrewserong @anton-vlasenko @bangank36 @brookewp @ciampo @colorful-tones @DAreRodz @dcalhoun @derekblank @ellatrix @felixarntz @geriux @glendaviesnz @gziolo @hellofromtonya @jasmussen @jblz @JEverhart383 @jordesign @jorgefilipecosta @jsnajdr @juanmaguitar @krokodok @luisherranz @Mamaduka @margolisj @matiasbenedetto @mburridge @mirka @mklute101 @mokagio @ndiego @ntsekouras @oandregal @ocean90 @ockham @priethor @ramonjd @richtabor @SiobhyB @Smit2808 @stokesman @t-hamano @torounit @tyxla @walbo @WunderBart @youknowriad

Many thanks to @jameskoster for the release assets, @annezazu and @priethorfor the general support and help collecting highlights, and @jeffikus for the copy check!

#block-editor, #core-editor, #gutenberg, #gutenberg-new