Title: dev-notes-6.1 – Make WordPress Core

---

#  Tag Archives: dev-notes-6.1

 [  ](https://profiles.wordpress.org/craigfrancis/) [Craig Francis](https://profiles.wordpress.org/craigfrancis/)
9:43 pm _on_ October 31, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1,
[wpdb ( 6 )](https://make.wordpress.org/core/tag/wpdb/)   

# 󠀁[Postponed to WP 6.2: Escaping Table and Field names with wpdb::prepare()](https://make.wordpress.org/core/2022/10/31/postponed-to-wp-6-2-escaping-table-and-field-names-with-wpdbprepare/)󠁿

Support for `%i` to escape Table and Field names was postponed to 6.2, see:
[https://make.wordpress.org/core/2022/10/08/escaping-table-and-field-names-with-wpdbprepare-in-wordpress-6-1/](https://make.wordpress.org/core/2022/10/08/escaping-table-and-field-names-with-wpdbprepare-in-wordpress-6-1/)

A problem was found during RC5, where some extensions use `field LIKE "%%%s%%"`,
and expect the `%s` to remain unquoted.

This is undocumented behaviour. Officially the only time placeholders should not
be quoted (for backwards compatibility reasons) is when using numbered or formatted
string placeholders (this is unsafe, and should be avoided).

In this case, the first `%%` results in a literal `"%"`, but this goes on to affect
the `%s`.

For reference, developers should rely on `wpdb::prepare()` to quote all variables,
so mistakes cannot be made. In this case it’s recommended to use something like 
the following:

    ```wp-block-code
    $wpdb->prepare( 
         'field LIKE %s', 
         '%' . $wpdb->esc_like( $var ) . '%' );
    ```

_Thanks to [@AlanP57](https://profiles.wordpress.org/alanp57/) for reporting, [@hellofromtonya](https://profiles.wordpress.org/hellofromtonya/)
and [@sergeybiryukov](https://profiles.wordpress.org/sergeybiryukov/) for reverting
the 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., [@azaozz](https://profiles.wordpress.org/azaozz/)
and [@bph](https://profiles.wordpress.org/bph/) for helping document this, and everyone
else for generally helping out._

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/), [#wpdb](https://make.wordpress.org/core/tag/wpdb/)

 [  ](https://profiles.wordpress.org/sabernhardt/) [Stephen Bernhardt](https://profiles.wordpress.org/sabernhardt/)
3:20 pm _on_ October 20, 2022     
Tags: [accessibility ( 58 )](https://make.wordpress.org/core/tag/accessibility/),
[core-multisite ( 5 )](https://make.wordpress.org/core/tag/core-multisite/), [dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/),
dev-notes-6.1, [multisite ( 90 )](https://make.wordpress.org/core/tag/multisite/),
[themes ( 43 )](https://make.wordpress.org/core/tag/themes/)   

# 󠀁[Multisite registration and activation pages have new HTML and CSS](https://make.wordpress.org/core/2022/10/20/multisite-registration-and-activation-pages-have-new-html-and-css/)󠁿

In WordPress 6.1, the forms for the `wp-signup.php` and `wp-activate.php` pages 
have several enhancements to both the markup and the styles.

## 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)-related improvements

### Indicating relationships:

 * Fieldsets, with visible legend text, group the radio buttons.
 * Form field description information connects to its related field with `aria-describedby`.
 * When present, error messages also connect to their field with `aria-describedby`.
   The generic error has an ID in case custom fields should refer to that.

### Preventing errors:

 * Required text fields have the `required` attribute.
 * The Site Name label indicates that users should enter the subdirectory only, 
   and the Site Domain is only the desired subdomain.
 * The Username field’s description text now specifies that letters need to be lowercase.

### Color contrast:

 * If the activation page has an error message, its default dark gray text color
   contrasts against the light background.
 * The default style for links within the registration page’s bordered message (`.
   mu_alert`) includes an underline and matches the text color of the rest of the
   message. For example, Twenty Twenty-One’s dark mode assigns a light link color,
   so the new style makes it readable and identifiable as a link. If a theme uses
   a bottom `border` or `box-shadow` on links, however, this underline could be 
   inappropriate.

![“Options page” link had light gray text in Twenty Twenty-One’s dark mode](https://
make.wordpress.org/core/files/2022/10/wp-signup-twenty-twenty-one-link-6.0.png)

Links were sometimes difficult to see

![“Options page” link is in the same dark gray text as the rest of the message](
https://make.wordpress.org/core/files/2022/10/wp-signup-twenty-twenty-one-link-6.1.
png)

Links match the surrounding text color, underlined, in 6.1

## New elements and styles for the registration page form

 * The `fieldset` and `legend` elements reset margin, padding and border properties.
 * The `legend` styles are consistent with the default `label` font size, weight
   and margins.
 * Radio buttons are inside paragraphs without a top margin, following the `legend`.
 * Text input fields and the submit button, which were set to 100% width plus padding,
   are only as wide as their container now.

[⌊screenshot of account setup page in WordPress 6.1⌉⌊screenshot of account setup
page in WordPress 6.1⌉[

New account setup, step 1, allowing both sites and usernames

### When people create an account:

 * Descriptive text for the Username and Email Address is inside paragraph tags.
   Because these immediately follow the input, the paragraphs do not have a top 
   margin.
 * Options for creating a site and/or a username are grouped in a `fieldset` with
   a new, visible `legend`.
 * Elements with the “`wp-signup-radio-button`” class wrap these options’ radio 
   buttons and their labels, and with “`display: block`” the options stack vertically.

![screenshot of form with Site Name (for subdirectory installations), Site Title,
Site Language and Privacy options](https://make.wordpress.org/core/files/2022/10/
wp-signup-twenty-twenty-another-site.png)

Form fields for an administrator (logged in) to create a new site

### When an administrator creates a new site:

 * A “`wp-signup-blogname`” container wraps the Site Name (or Site Domain) input
   with the domain, so themes could arrange them side-by-side.
 * For right-to-left languages, the domain and its input field remain in the left-
   to-right direction.
 * The “`privacy-intro`” `fieldset` uses paragraph tags inside it to retain most
   paragraph styles from the theme.
 * By wrapping “Privacy:” in a “`label-heading`” `span`, it appears above the rest
   of the `legend`. This text maintains the same default font size and weight given
   to the `legend` and `label` elements.
 * The “Yes” and “No” labels have moved next to the radio buttons, instead of inside
   them. Without the `strong` emphasis tags, these can match the default label font
   weight of `600`. If any theme overrides the “`.mu_register label.checkbox`” selector
   to `block` display, that property will need updating to an inline style.
 * In this `fieldset`, “`wp-signup-radio-button`” containers remain next to each
   other, with a small margin between them.

## Site activation page styles

![screenshot of site activation page with Twenty Twenty theme](https://make.wordpress.
org/core/files/2022/10/wp-activate-twenty-twenty-6.1.png)

 * The activation form’s container is centered, to match the signup page.
 * The input field and submit button cover the full width of the container, with`
   box-sizing: border-box` to prevent them from extending beyond 100%.
 * The `form` and `.error` selectors now include `.wp-activate-container` so that
   the styles do not affect elements in the 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.

## 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

This is not new to 6.1, but block themes should continue to include `header.php`
and `footer.php` template files for these pages. To make a header template more 
specific to the networknetwork (versus site, blog) pages, its filename can be `header-
wp-signup.php` or `header-wp-activate.php`.

---

For more information about the HTMLHTML HyperText Markup Language. The semantic 
scripting language primarily used for outputting content in web browsers. and CSSCSS
Cascading Style Sheets. changes, view tickets [#40361](https://core.trac.wordpress.org/ticket/40361)
and [#54344](https://core.trac.wordpress.org/ticket/54344).

Props: Thank you, [@ironprogrammer](https://profiles.wordpress.org/ironprogrammer/),
[@webcommsat](https://profiles.wordpress.org/webcommsat/), [@audrasjb](https://profiles.wordpress.org/audrasjb/)
and [@joedolson](https://profiles.wordpress.org/joedolson/), for peer review and
editing.

[#accessibility](https://make.wordpress.org/core/tag/accessibility/), [#core-multisite](https://make.wordpress.org/core/tag/core-multisite/),
[#dev-notes](https://make.wordpress.org/core/tag/dev-notes/), [#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/),
[#multisite](https://make.wordpress.org/core/tag/multisite/), [#themes](https://make.wordpress.org/core/tag/themes/)

 [  ](https://profiles.wordpress.org/desrosj/) [Jonathan Desrosiers](https://profiles.wordpress.org/desrosj/)
10:02 pm _on_ October 14, 2022     
Tags: [dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/),
dev-notes-6.1, [networks-sites ( 43 )](https://make.wordpress.org/core/tag/networks-sites/)

# 󠀁[Global terms removed in WordPress 6.1](https://make.wordpress.org/core/2022/10/14/global-terms-removed-in-wordpress-6-1/)󠁿

Global terms is an old feature from the [MU](https://codex.wordpress.org/WordPress_MU)
days of WordPress when multisitemultisite Used to describe a WordPress installation
with a network of multiple blogs, grouped by sites. This installation type has shared
users tables, and creates separate database tables for each blog (wp_posts becomes
wp_0_posts). See also **network**, **blog**, **site** and single site installs had
separate code bases. It has been abandoned and unmaintained for a significant amount
of time, and in WordPress 6.1, it has finally and officially been removed.

Here’s a brief timeline of events leading up to this change.

## WordPress 3.0 (2010): Phase 1

The first phase of removing global terms was in WordPress 3.0.

 * The user interface for global terms was completely removed in [[14854]](https://core.trac.wordpress.org/changeset/14854).
 * The “on” switch in CoreCore Core is the set of software required to run WordPress.
   The Core Development Team builds WordPress. was removed in [[14880]](https://core.trac.wordpress.org/changeset/14880),
   though plugins were free to call `install_global_terms()` directly, if they dared.

## 2010-2022:

 * A Global Terms 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/](https://wordpress.org/plugins/)
   or can be cost-based plugin from a third-party. was created and released with
   the goal of moving the code there from Core. The [plugin broke with the release of WordPress 3.5](https://wordpress.org/support/topic/wp-35-rc1-global-terms-10-not-work/)
   and has not been updated.
 * With the introduction of [term splitting in WordPress 4.2](https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/),
   the feature became even more broken and 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.-ridden.
 * When term 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. was introduced in WordPress 4.4 (see [#10142](https://core.trac.wordpress.org/ticket/10142)),
   the affects on global terms were (rightfully) not considered. I haven’t actually
   tested, but it’s safe to say that term meta does not work with global terms, 
   and would cause a number of issues.
 * Searches of the plugin directory show [no](https://wpdirectory.net/search/01GFBV7BSV0G86JH90BCM1H02S)
   [meaningful](https://wpdirectory.net/search/01GFBV744Q7E4VA40NBAYW0CPR) [usage](https://wpdirectory.net/search/01GFBV7N3J8B02Q0F73S1MCV65)
   of the global terms related functions with the exception of `global_terms_enabled()`(
   more on this below).

## WordPress 6.1 (2022): Phase 2

This release will mark the completion of the second and final phase of removing 
global terms.

 * All global term related functions have been officially deprecated and will now
   throw proper deprecated notices (see [[54240]](https://core.trac.wordpress.org/changeset/54240)).
 * The functions have also been no-opped ([no operationed](https://en.wikipedia.org/wiki/NOP_(code)))
   and calling them will have no effect, except for triggering a deprecated notice.
   There are a two exceptions which are detailed below.

### `global_terms()` function

This function used to be hooked to the `term_id_filter` filterFilter Filters are
one of the two types of Hooks [https://codex.wordpress.org/Plugin_API/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.. This is no longer the case. However, the function will continue to return
the `$term_id` value passed to it in case it’s being called directly in the wild.

### `global_terms_enabled()` function

This function previously returned a boolean indicating whether global terms were
enabled or not. Even though there is almost no usage of this function in the plugin
directory, it’s the function with the highest probability of being used.

After [[54240]](https://core.trac.wordpress.org/changeset/54240), `global_terms_enabled()`
will always return `false`.

### `sitecategories` database table

Sites that had global terms enabled at one point in time will likely have a `sitecategories`
table in their database. This table will not be touched with these changes. Most
sites should be able to safely remove this table.

For more information on this change, see [#21734](https://core.trac.wordpress.org/ticket/21734)
on TracTrac An open source project by Edgewall Software that serves as a bug tracker
and project management tool for WordPress..

_Props _[@davidbaumwald](https://profiles.wordpress.org/davidbaumwald/)_ for reviewing._

[#dev-notes](https://make.wordpress.org/core/tag/dev-notes/), [#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/),
[#networks-sites](https://make.wordpress.org/core/tag/networks-sites/)

 [  ](https://profiles.wordpress.org/zieladam/) [Adam Zieliński](https://profiles.wordpress.org/zieladam/)
1:55 pm _on_ October 12, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1,
[developer-documentation ( 8 )](https://make.wordpress.org/core/tag/developer-documentation/)

# 󠀁[Block API changes in WordPress 6.1](https://make.wordpress.org/core/2022/10/12/block-api-changes-in-wordpress-6-1/)󠁿

WordPress 6.1 introduces several new 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. 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. features available via the`
block.json` file.

As a recap, the `block.json` file was [introduced in WordPress 5.5](https://make.wordpress.org/core/2020/07/30/block-api-updates-in-5-5/)
and has been encouraged as the canonical way of registering block types [since the WordPress 5.8 release](https://make.wordpress.org/core/2021/06/23/block-api-enhancements-in-wordpress-5-8/).
Many of the recent Block API features, including the ones in this post, depend on`
block.json` being available on the server.

## **PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher templates for rendering blocks**

Before WordPress 6.1, the main output of a block would often be generated in either
a 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](https://www.javascript.com/)
[`save` function](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/),
or in a PHP [ `render_callback`](https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/creating-dynamic-blocks/)
function.

WordPress 6.1 adds a third way: a separate PHP template file. The path can be specified
via the `render` property of `block.json`:

    ```notranslate
    {
        "render": "file:./render.php"
    }
    ```

If you don’t have a `render_callback` setting specified, then the template is used
instead. It behaves similarly, but feels much more like traditional WordPress template
handling.

The template path is prefixed with `file:` and relative to the location of the `
block.json` file, following the [npm specification](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#local-paths).

The `render.php` template could look like this:

    ```notranslate
    <p <?php echo get_block_wrapper_attributes(); ?>>
        <?php esc_html_e( 'Hello from a dynamic block!', 'my-plugin' ); ?>
    </p>
    ```

**Note: ** The entire file is used as a template, so there’s no need to define additional
wrapping functions.

The following variables are available inside the template:

 * `$attributes (array)`: The block attributes.
 * `$content (string)`: The block default content.
 * `$block (WP_Block)`: The block instance.

## **Use multiple scripts per block**

The WordPress 6.1 version enables defining multiple script files in all relevant`
block.json` entries: `editScript`, `script`, and `viewScript`. ([Trac #56408](https://core.trac.wordpress.org/ticket/56408))
It’s now possible to pass a script handle registered with the [wp_register_script](https://developer.wordpress.org/reference/functions/wp_register_script/)
function, a path to a JavaScript file relative to the `block.json` file, or an array
with a mix of both:

    ```notranslate
    {
        "editorScript": "file:./index.js",
        "script": "file:./script.js",
        "viewScript": [ "file:./view.js", "example-shared-view-script" ]
    }
    ```

WordPress maintains a degree of backwards compatibility by passing along only the
first (string) item to any existing code working with these values.

**Note**: Processing a single string requires a different code than processing an
array of strings. Therefore, the `WP_Block_Type` class and the `/wp/v2/block-types`
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/](https://developer.wordpress.org/rest-api/)
endpoint deprecate accessing string values through their old names: `editor_script`,`
script`, `view_script`, `editor_style`, and `style`.

The full array of scripts can be accessed via the following **new properties** of
the `WP_Block_Type` class and the `/wp/v2/block-types` REST API endpoint:

 * `editor_script_handles`,
 * `script_handles`,
 * `view_script_handles`,
 * `editor_style_handles`, and
 * `style_handles`.

Furthermore, the scripts and styles registered in `block.json` will automatically
be loaded for static and dynamic blocks in WordPress 6.1. Previously, the dynamic
blocks were expected to register their assets.

Combined with the support for [multiple stylesheets per block](https://make.wordpress.org/core/2021/12/15/using-multiple-stylesheets-per-block/)
shipped with WordPress 5.9, this change enables developers to use multiple entries
for all supported asset types.

## **Import individual coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. blocks from `@wordpress/block-library`**

The import of individual core blocks ([Pull request #42258](https://github.com/WordPress/gutenberg/pull/42258))
from the `@wordpress/block-library` npm package was enabled to help developers reduce
the bundle size of their applications. Prior to this change, the use of a single
core block required pulling in the entire set.

Individual core blocks can be imported in three different ways:

    ```notranslate
    // You can import and automatically register the block:
    import '@wordpress/block-library/build-module/verse/init';

    // Or you can automatically register the block and reuse the reference:
    import verseBlock from '@wordpress/block-library/build-module/verse/init';

    // Or you can import the init function without registering the block…
    import { init } from '@wordpress/block-library/build-module/verse';

    // …and then register the block when needed:
    const verseBlock = init();
    ```

_Props to [@gziolo](https://profiles.wordpress.org/gziolo/), and [@revgeorge](https://profiles.wordpress.org/revgeorge/)
for technical review, to [@bph](https://profiles.wordpress.org/bph/) and [@webcommsat](https://profiles.wordpress.org/webcommsat/)
for final review._

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/), [#developer-documentation](https://make.wordpress.org/core/tag/developer-documentation/)

 [  ](https://profiles.wordpress.org/jorgefilipecosta/) [Jorge Costa](https://profiles.wordpress.org/jorgefilipecosta/)
11:48 pm _on_ October 11, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1

# 󠀁[Content only editing and other locking updates](https://make.wordpress.org/core/2022/10/11/content-locking-features-and-updates/)󠁿

WordPress 6.1 comes with content-only editing for blocks, patterns, and templates,
as well as a template lock inheritance for the Column 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..

Almost any layout using the coreCore Core is the set of software required to run
WordPress. The Core Development Team builds WordPress. blocks can be composed and
shared as a pattern. End users may have found they could accidentally break these
layouts or use them in an unexpected way. Previously, the experience of using patterns
was not on par with having a specific block for a complex layout.

With WordPress 6.1, a new experimental type of locking has been added called “contentOnly”.
This locking method can be used by any pattern or block. When enabled, the users
can only change the nested content inside the block/pattern. The block structure
starts behaving as a single unit where the block hierarchy is entirely hidden. The
user can only change text and media URLs in the blocks. 

Additionally, block types without content are hidden from the List View and are 
unable to gain focus within the block list. This makes it harder to break the expected
layout.

In locked mode, the inspector controls of the blocks are also disabled. Instead,
the sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used
by WordPress themes to display information that is not a part of the main content.
It is not always a vertical column on the side. It can be a horizontal rectangle
below or above the content area, footer, header, or any where in the theme. only
shows a list of content blocks a user can change.

For now, users still have the freedom to leave this locked mode by pressing modify.
When modify is pressed, the block editor shows the hierarchy, and the user has complete
control. For now, any user can press the modify button. In the future, it may depend
on the capabilitiescapability A **capability** is permission to perform one or more
types of task. Checking if a user has a capability is performed by the `current_user_can`
function. Each user of a WordPress site might have some permissions but not others,
depending on their role. For example, users who have the Author role usually have
permission to edit their own posts (the “edit_posts” capability), but not permission
to edit other users’ posts (the “edit_others_posts” capability). of the user.

### Content only editing in a block

The core blocks that support content locking are column, cover, and group.

To use content locking, the `templateLock` attribute of one of the previously referred
blocks should be set to “contentOnly”.

In the following pattern, only the content of the paragraph blocks can be edited.
A user would not view the spacer block in between.

    ```has-text-color
    Paragraph 2
    ```

### Using as custom post-type template locking

The new content-only locking can also be used as custom post-type template locking,
like all the other locking methods that exist.

Example:

    ```php
    function myplugin_register_template() {
        $post_type_object = get_post_type_object( 'post' );
        $post_type_object->template = array(
            array(
    			'core/group',
    			array(),
    			array(
    				array(
    					'core/paragraph',
    					array( 'placeholder' => 'Add Description...',
    					)
    				)
    			)
    		),
        );
        $post_type_object->template_lock = 'contentOnly';
    }
    add_action( 'init', 'myplugin_register_template' );
    ```

Visit pull request: [#43037](https://github.com/WordPress/gutenberg/pull/43037) 
and [Block Template Documentation](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-templates/#locking)

## Global template_lock inheritance in the column block

The block template defines a default list of blocks in an editor session. To prevent
manipulation of the block list, all blocks can be locked by the [template_lock](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-templates/#locking)
property.

However, in column blocks, [the editor would crash on certain operations](https://github.com/WordPress/gutenberg/issues/37912)
because it would initialize the lock status defined in the block template. To resolve
this issue and to be more consistent about template lock status inheritance, column
blocks now inherit the lock status of block templates.

For more information visit [#42677](https://github.com/WordPress/gutenberg/pull/42677).

_Props to [@wildworks](https://profiles.wordpress.org/wildworks/) contribution, 
[@bph](https://profiles.wordpress.org/bph/) and [@webcommsat](https://profiles.wordpress.org/webcommsat/)
for reviews_.

 [#6-1](https://make.wordpress.org/core/tag/6-1/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/)

 [  ](https://profiles.wordpress.org/zieladam/) [Adam Zieliński](https://profiles.wordpress.org/zieladam/)
11:41 pm _on_ October 11, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[@wordpress/data ( 2 )](https://make.wordpress.org/core/tag/wordpress-data/), [dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/),
dev-notes-6.1, [editor ( 222 )](https://make.wordpress.org/core/tag/editor/)   

# 󠀁[Simplified data access with new React hooks in WordPress 6.1](https://make.wordpress.org/core/2022/10/11/simplified-data-access-with-new-react-hooks-in-wordpress-6-1/)󠁿

The `@wordpress/core-data` 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](https://www.javascript.com/)
package in 6.1 ships new ReactReact React is a JavaScript library that makes it 
easy to reason about, construct, and maintain stateless and stateful user interfaces.
[https://reactjs.org](https://reactjs.org/) 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. that make accessing WordPress data easier than before.

### useEntityRecords

With `useEntityRecords` developers, can fetch a list of records with a single hook
call:

    ```notranslate
    useEntityRecords( 'postType', 'page' )
    ```

Below is what it looks like when used in a React component:

    ```notranslate
    import { useEntityRecord } from '@wordpress/core-data';

    function PageTitlesList() {
       const pages = useEntityRecords( 'postType', 'page' );

       if ( pages.isResolving ) {
          return 'Loading...';
       }

       return (
          <ul>
             {pages.records.map(( page ) => (
                <li>{ page.title }</li>
             ))}
          </ul>
       );
    };

    // Rendered in the application:
    // <PageTitlesList />
    ```

In the above example when `PageTitlesList` is rendered, the list of records and 
the resolution details will be retrieved from the store state using `getEntityRecords()`,
or resolved if missing.

The `useEntityRecords` accepts four arguments:

 * `kind (string)` – Kind of the entity, e.g. `root` or a `postType`.
 * `name (string)` – Name of the entity, e.g. `plugin` or a `post`.
 * `queryArgs (object)` – Optional 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. query to
   pass to the requested 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. endpoint, e.g. `{ "per_page": 10 }`
 * `options (object)` – Optional hook options. Currently, the only supported option
   is `enabled` and determines whether the records will be requested.

It returns an object with the following properties:

 * `records (array)` – The requested entity records
 * `isResolving (boolean)` – Are these records being resolved at the moment?
 * `hasResolved (boolean)` – Have these records resolved already?
 * `status (string)` – Resolution status. One of: `IDLE`, `RESOLVING`, `SUCCESS`,
   or `ERROR`

### useEntityRecord:

Developers can retrieve a single record using the `useEntityRecord` hook:

    ```notranslate
    import { useEntityRecord } from '@wordpress/core-data';

    function PageTitleDisplay( { id } ) {
    	const page = useEntityRecord( 'postType', 'page', id );

    	if ( page.isResolving ) {
    		return 'Loading...';
    	}

    	return page.title;
    }

    // Rendered in the application:
    // <PageTitleDisplay id={ 13 } />
    ```

In the above example, when `PageTitleDisplay` is rendered, the page and the resolution
details will be retrieved from the store state using `getEntityRecord()`, or resolved
if missing.

The `useEntityRecord` hook accepts four arguments:

 * `kind (string)` – Kind of the entity, e.g. `root` or a `postType`.
 * `name (string)` – Name of the entity, e.g. `plugin` or a `post`.
 * `recordId (string|number)` – The ID of the requested entity record.
 * `options (object)` – Optional hook options. Currently, the only supported option
   is `enabled` and determines whether the records will be requested.

It returns an object with the following properties:

 * `record (object|null)` – The resolved entity record.
 * `isResolving (boolean)` – Is the record being resolved at the moment?
 * `hasResolved (boolean)` – Has the record already resolved already?
 * `status (string)` – Resolution status. One of: `IDLE`, `RESOLVING`, `SUCCESS`,
   or `ERROR`.
 * `hasEdits (boolean)` – Does the record have any in-browser edits?
 * `editedRecord (object|null)` – The record with any in-browser edits applied.
 * `edit (function)` – Applies the in-browser edits to the edited entity record.
 * `save (function)` – Persist the in-browser edits to the server.

Below is an example showcasing the editing capabilitiescapability A **capability**
is permission to perform one or more types of task. Checking if a user has a capability
is performed by the `current_user_can` function. Each user of a WordPress site might
have some permissions but not others, depending on their role. For example, users
who have the Author role usually have permission to edit their own posts (the “edit_posts”
capability), but not permission to edit other users’ posts (the “edit_others_posts”
capability). provided by `useEntityRecord`:

    ```notranslate
    import { useDispatch } from '@wordpress/data';
    import { useCallback } from '@wordpress/element';
    import { __ } from '@wordpress/i18n';
    import { TextControl } from '@wordpress/components';
    import { store as noticeStore } from '@wordpress/notices';
    import { useEntityRecord } from '@wordpress/core-data';

    function PageRenameForm( { id } ) {
     	const page = useEntityRecord( 'postType', 'page', id );
     	const { createSuccessNotice, createErrorNotice } =
     		useDispatch( noticeStore );

     	const setTitle = useCallback( ( title ) => {
     		page.edit( { title } );
     	}, [ page.edit ] );

     	if ( page.isResolving ) {
     		return 'Loading...';
     	}

     	async function onRename( event ) {
     		event.preventDefault();
     		try {
     			await page.save();
     			createSuccessNotice( __( 'Page renamed.' ), {
     				type: 'snackbar',
     			} );
     		} catch ( error ) {
     			createErrorNotice( error.message, { type: 'snackbar' } );
     		}
     	}

     	return (
    		<form onSubmit={ onRename }>
    			<TextControl
    				label={ __( 'Name' ) }
    				value={ page.editedRecord.title }
    				onChange={ setTitle }
    			/>
    			<button type="submit">{ __( 'Save' ) }</button>
    		</form>
     	);
    }
    // Rendered in the application:
    // <PageRenameForm id={ 1 } />
    ```

In the above example, updating and saving the page title is handled via the `edit()`
and `save()` mutation helpers provided by `useEntityRecord()`;

### useResourcePermissions

Developers can check the current user’s permissions using the `useResourcePermissions`
hook:

    ```notranslate
    import { useResourcePermissions } from '@wordpress/core-data';

    function Page({ pageId }) {
    	const pagePermissions = useResourcePermissions( 'pages', pageId );

    	if ( pagePermissions.isResolving ) {
    		return 'Loading ...';
    	}

    	return (
            <div>
    			{pagePermissions.canCreate
    				? (+ Create a new page)
    				: false}
    			{pagePermissions.canUpdate
    				? (Edit page)
    				: false}
    			{pagePermissions.canDelete
    				? (Delete page)
    				: false}
    			// ...
            </div>
    	);
    }

    // Rendered in the application:
    // <Page pageId={ 15 } />
    ```

In the above example when the `Page` is rendered, the appropriate record-level page
permissions and the resolution details will be retrieved from the store state using
the `canUser()` selector, or resolved if missing.

In the following example, the `PagesList` component requests permissions for the
pages _collection_ and not a specific _page record_:

    ```notranslate
    import { useResourcePermissions } from '@wordpress/core-data';

    function PagesList() {
       const pagesPermissions = useResourcePermissions( 'pages' );

       if ( pagesPermissions.isResolving ) {
          return 'Loading ...';
       }

       return (
          <div>
             {pagesPermissions.canCreate
                ? (+ Create a new page)
                : false }
             // ...
          </div>
       );
    }

    // Rendered in the application:
    // <PagesList />
    ```

The `useResourcePermissions` hook accepts two arguments:

 * `resource (string)` – The resource in question, e.g., media.
 * `id (string|number)` – Optional ID of a specific resource entry, e.g., 10.

It returns an object with the following properties:

 * `status (string)` – Resolution status. One of: `IDLE`, `RESOLVING`, `SUCCESS`,
   or `ERROR`
 * `isResolving (boolean)` – Is the record being resolved at the moment?
 * `hasResolved (boolean)` – Has the record already resolved?
 * `create (boolean)` – Can the current user create new resources of this type?
 * `read (boolean)` – Can the current user read resources of this type?
 * `update (boolean)` – Only if `id` is provided. Can the current user update the
   requested resource?
 * `delete (boolean)` – Only if `id` is provided. Can the current user delete the
   requested resource?

Documentation: [@wordpress/core-data packages](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-core-data/)

_Props for review [@bph](https://profiles.wordpress.org/bph/), [@gziolo](https://profiles.wordpress.org/gziolo/),
and [@webcommsat](https://profiles.wordpress.org/webcommsat/)_

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#wordpress-data](https://make.wordpress.org/core/tag/wordpress-data/),
[#dev-notes](https://make.wordpress.org/core/tag/dev-notes/), [#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/),
[#editor](https://make.wordpress.org/core/tag/editor/)

 [  ](https://profiles.wordpress.org/scruffian/) [Ben Dwyer](https://profiles.wordpress.org/scruffian/)
9:10 pm _on_ October 11, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1,
styles, [themes ( 43 )](https://make.wordpress.org/core/tag/themes/)   

# 󠀁[Reference Styles values in theme.json](https://make.wordpress.org/core/2022/10/11/reference-styles-values-in-theme-json/)󠁿

With WordPress 6.1, theme developers can style elements with references from other
settings.

Theme designs often require consistency in the styles applied to blocks. This can
be achieved by setting Styles properties which are inherited by blocks using the
inheritance of the CSSCSS Cascading Style Sheets. cascade. In some cases blocks 
want to apply settings from Styles to a different property of 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. – for example 
the button element might want to use the global text color for its background color
and the global background for its text color.

To solve this problem, themes need to be able to share Styles settings with blocks.
This will make it easier for users to update these shared properties across all 
their blocks. Again, as example for button element the developer wants to use the
text color for its background. If the button element is set up as in the example
above, then when a user edits the global text color, the background color of their
buttons will also be updated, too.

To achieve this, a new `ref` property was added to 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. which allows one property to set itself to the value of another, for example
defining this for button elements:

    ```wp-block-code
    "elements": {
    	"button": {
    		"color": {
    			"background": {
    				"ref": "styles.color.text"
    			},
    			"text": {
    				"ref": "styles.color.background"
    			}
    		}
    	}
    }
    ```

Styles will convert `{ref: "styles.color.background"}` the value at: `styles > color
> background` in theme.json.

## Limitations

It is currently only possible to use `ref` to get one value from theme.json; a `
ref` value cannot point to another `ref`. This also prevents circular `ref`s from
causing problems.

_Props to [@bph](https://profiles.wordpress.org/bph/) and [@webcommsat](https://profiles.wordpress.org/webcommsat/)
for review of this post._

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/), [#styles](https://make.wordpress.org/core/tag/styles/),
[#themes](https://make.wordpress.org/core/tag/themes/)

 [  ](https://profiles.wordpress.org/annezazu/) [annezazu](https://profiles.wordpress.org/annezazu/)
5:01 pm _on_ October 11, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[accessibility ( 58 )](https://make.wordpress.org/core/tag/accessibility/), [dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/),
dev-notes-6.1   

# 󠀁[WordPress 6.1 Accessibility Improvements](https://make.wordpress.org/core/2022/10/11/wordpress-6-1-accessibility-improvements/)󠁿

_Thank you to [@joedolson](https://profiles.wordpress.org/joedolson/) and [@alexstine](https://profiles.wordpress.org/alexstine/)
for collaborating to write this post._

[With WordPress 6.1 around the corner](https://make.wordpress.org/core/2022/07/26/wordpress-6-1-planning-roundup-v2/),
this post brings together the many 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) improvements and fixes to look forward to that might be 
hard to discover amongst the details of 500+ bugs and enhancements. As always, there’s
more work to be done with accessibility requiring an ongoing effort and commitment.

If you’re interested in helping with this work, please join the [#accessibility](https://wordpress.slack.com/archives/C02RP4X03)
channel in Make SlackSlack Slack is a Collaborative Group Chat Platform [https://slack.com/](https://slack.com/).
The WordPress community has its own Slack Channel at [https://make.wordpress.org/chat/](https://make.wordpress.org/chat/)(
need a [slack account](https://make.wordpress.org/chat/) to view) and check out 
[how you can get involved](https://make.wordpress.org/accessibility/handbook/get-involved/).
There are numerous ways to get involved in this important work including testing,
giving accessibility feedback, and creating PRs to address feedback.

**Themes**

Most notably, 6.1 will see the introduction of both Twenty Twenty-Two and Twenty
Twenty-Three marked as accessibility ready, making them both the first default 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 to do so(
and only default block themes). This helps open up more folks to the world of block
themes and broader site editing features.

 * [Twenty Twenty-Three: Add “Accessibility Ready” tag to theme in repository.](https://core.trac.wordpress.org/changeset/54467)
 * [Twenty Twenty-Two: Add “Accessibility Ready” tag to theme in repository](https://core.trac.wordpress.org/ticket/55172)**.**
 * [Twenty Twenty: Comments accessibility – links should be identifiable](https://core.trac.wordpress.org/ticket/56269).
 * [Twenty Nineteen: Consider a custom hover/underline style](https://core.trac.wordpress.org/ticket/45925).

**WP Adminadmin (and super admin) Screens**

Across the many screens in WP Admin, improvements abound. Changes range from improvements
in color contrast on the pluginPlugin A plugin is a piece of software containing
a group of functions that can be added to a WordPress website. They can extend functionality
or add new features to your WordPress websites. WordPress plugins are written in
the PHP programming language and integrate seamlessly with WordPress. These can 
be free in the WordPress.org Plugin Directory [https://wordpress.org/plugins/](https://wordpress.org/plugins/)
or can be cost-based plugin from a third-party. screen during recovery mode, to 
a switch from a text input to a textarea field in the media library, so users are
better able to see the content of the field while editing. 

 * [Administration: Avoid menu/sub-menu overlap on small screens.](https://core.trac.wordpress.org/ticket/32747)
 * [Administration: Add labels to read-only form fields](https://core.trac.wordpress.org/ticket/54302).
 * [Editor: Fix text zoom on link popup editor](https://core.trac.wordpress.org/ticket/53174)
   by updating the CSSCSS Cascading Style Sheets. in the classic visual editor link
   popup.
 * [General: Ensure admin notices are properly displayed on Site Health layout.](https://core.trac.wordpress.org/ticket/54624)
 * [List Tables: Hide the Comments column icon and title attribute from screen readers](https://core.trac.wordpress.org/ticket/55555).
 * [Media: Change the alt attribute field to textarea in media library](https://core.trac.wordpress.org/ticket/50066)
   so users are better able to see the entire content of the alt text field when
   editing.
 * [Permalinks: Label and describe permalink settings fields.](https://core.trac.wordpress.org/ticket/55498)
 * [Permalinks: Fix aria-live text when removing custom structure.](https://core.trac.wordpress.org/ticket/56230)
 * [Plugins: Visually align plugin cards in Plugin Install screen.](https://core.trac.wordpress.org/ticket/55721)
 * [Plugins: Improve color contrast on plugins screen when recovery mode is activated.](https://core.trac.wordpress.org/ticket/56190)
 * [Required fields are now consistently identified with a visual indicator, implemented globally](https://core.trac.wordpress.org/ticket/54394).
 * [Taxonomy: Associate field descriptions with fields.](https://core.trac.wordpress.org/ticket/55651)
 * [Taxonomy: Set use_desc_for_title to false by default in wp_list_categories()](https://core.trac.wordpress.org/ticket/55530).
 * [Upgrade/Install: Use “placeholder” for example values in setup-config.php.](https://core.trac.wordpress.org/ticket/56365)
 * [Pair wpAjax admin notices with accessible audible messages](https://core.trac.wordpress.org/ticket/55537),
   increasing accessibility for some success / error admin notices on some pages.

**Login and Registration**

To better call attention to the many improvements to this form, this section has
been pulled out of the WP Admin Screen section. While this is a lesser used interface,
the accessibility improvements are quite significant for this release, addressing
many longstanding problems. This includes proper labels for required fields, explicitly
associating errors with input fields so folks know what actions to take where, improved
labels for radio buttons, and more. 

 * [Login and Registration: Access improvements to network signup](https://core.trac.wordpress.org/ticket/40361).
 * [Login: Explicitly associate errors with input fields](https://core.trac.wordpress.org/ticket/54483)****
   by adding an aria-describedby relationship between input fields and displayed
   error messages.
 * [Login and Registration: Properly label site and user information on the network registration screen for required fields. ](https://core.trac.wordpress.org/ticket/54344)

**Site Editor/Template Editor**

Even though the Site and Template editors both use blocks, there are some specific
accessibility challenges for these new interfaces in a site editing world. More 
work is needed and, if you’re keen to help, please [join the FSE Outreach Program](https://make.wordpress.org/test/handbook/full-site-editing-outreach-experiment/)
where you can go through calls for testing to provide feedback, find bugs, and more.

 * [Make the site editor header toolbar use the ARIA toolbar pattern](https://github.com/WordPress/gutenberg/pull/41902#top).
 * [Site Editor: Don’t disable the Save button](https://github.com/WordPress/gutenberg/pull/42842#top).
 * [Add `aria-label` to the template action buttons Edit/New ](https://github.com/WordPress/gutenberg/pull/41615#top)
   to fix lack of context on action buttons and improve accessibility.
 * [Block Styles: Remove unnecessary button role and ‘onKeyDown’ handler](https://github.com/WordPress/gutenberg/pull/40427#top).
 * [Fix tabbing from first or last block in site editor](https://github.com/WordPress/gutenberg/pull/42036#top).
 * [Update site editor region labels to match post editor](https://github.com/WordPress/gutenberg/pull/42037#top).
 * [Replace clickable div elements with buttons in the Add template modal](https://github.com/WordPress/gutenberg/pull/42668#top).

**Navigation block**

The navigation block continues to be a powerful and complex block, especially in
the world of block themes. While there are fallbacks and an improved menu management
experience to look forward to in this release, there is also a nice set of accessibility
related fixes to make this necessary block usable for more people in more situations.

 * [Navigation block: Only focus submenu trigger on escape key press](https://github.com/WordPress/gutenberg/pull/41986#top).
 * [Navigation submenus: Allow Escape key to close the submenu and focus trigger](https://github.com/WordPress/gutenberg/pull/41774#top).
 * [Navigation block: After choosing an option from Select Menu, focus after block rerender](https://github.com/WordPress/gutenberg/pull/40390#top).
 * [Better handling of loading states for navigation selector](https://github.com/WordPress/gutenberg/pull/43904#top).

**General Block Editor (other blocks, writing flow, components, etc)**

This section covers a wide range of items including everything from improvements
to additional blocks, like a focus loss fix for the Table block, and larger improvements
to functionality like the Tools Panel. Specifically, the Tools Panel helps power
part of the [experience of using the numerous design tools](https://make.wordpress.org/core/2022/09/26/core-editor-improvement-catalyst-for-creativity/)****
present in more blocks for this release. It’s what you’d interact with to interact
with more tools or reset changes. Improving the accessibility of this single tool
has a cascading impact by improving the experience everywhere it’s used.  

 * [Add better ARIA labels to toggle buttons in Summary panel](https://github.com/WordPress/gutenberg/pull/42114#top).
 * [Add aria-checked to the selected heading level menu item.](https://github.com/WordPress/gutenberg/pull/42273#top)
 * [Add label to Preview options dropdown menu](https://github.com/WordPress/gutenberg/pull/41566#top).
 * [After closing welcome and content is empty, focus title field](https://github.com/WordPress/gutenberg/pull/40195#top).
 * [Allow defining an aria-label in group blocks](https://github.com/WordPress/gutenberg/pull/41744#top),
   allowing users and theme-authors to manually define an aria-label in their templates.
 * [BorderControl: Update labeling, tooltips and wrap with fieldset and legend](https://github.com/WordPress/gutenberg/pull/42348#top).
 * [Change shortcut text for redo tooltip on Windows](https://github.com/WordPress/gutenberg/pull/42830#top).
 * [Change the BoxControl ARIA role from region to group.](https://github.com/WordPress/gutenberg/pull/42094#top)
 * [ComboboxControl: use custom prefix when generating the instanceId](https://github.com/WordPress/gutenberg/pull/42134#top).
 * [Improve text read by screen readers for BottomSheetSelectControl](https://github.com/WordPress/gutenberg/pull/41036#top)(
   mobile).
 * [Block Editor: Replace aria-owns with aria-controls in URLInput](https://github.com/WordPress/gutenberg/pull/43278#top).
 * [Block Editor: Remove aria-selected from LinkPreview](https://github.com/WordPress/gutenberg/pull/43279#top).
 * [Fix focus loss happening when installing blocks from the directory](https://github.com/WordPress/gutenberg/pull/40340#top).
 * [Fix focus loss when navigating the guide component](https://github.com/WordPress/gutenberg/pull/40324#top).
 * [Fix focus loss when creating pages from link control search results](https://github.com/WordPress/gutenberg/pull/40342#top).
 * [Fix issue where changing the id of the recursion provider can result in focus loss](https://github.com/WordPress/gutenberg/pull/42916#top).
 * [Fix Top toolbar buttons tooltips and style when ‘Show button text labels’ is enabled](https://github.com/WordPress/gutenberg/pull/42815#top).
 * [Fix labelling and semantics of the paragraph block Left to right control](https://github.com/WordPress/gutenberg/pull/42324#top).
 * [Fix mismatching label and visible text on the Toggle block inserter button](https://github.com/WordPress/gutenberg/pull/42359#top).
 * [Fix: the description text of block movers for horizontal movement](https://github.com/WordPress/gutenberg/pull/42393#top).
 * [List View: add role=](https://github.com/WordPress/gutenberg/pull/44291#top)
   [application](https://github.com/WordPress/gutenberg/pull/44291#top)[ to prevent browse mode triggering in NVDA](https://github.com/WordPress/gutenberg/pull/44291#top).
 * [Prevent navigation on url input suggestion selection via enter key](https://github.com/WordPress/gutenberg/pull/40906#top).
 * [Prevent opening the links in the editor](https://github.com/WordPress/gutenberg/pull/40593#top).
 * [Query Loop: hide pagination link arrows from assistive technology](https://core.trac.wordpress.org/ticket/56067).
 * [Query Loop: Add aria-hidden to query pagination arrows](https://github.com/WordPress/gutenberg/pull/42583#top).
 * [Separator: disable the contrastChecker via block.json](https://github.com/WordPress/gutenberg/pull/43357#top).
 * [Table block: Fix focus loss after Create Table button is selected](https://github.com/WordPress/gutenberg/pull/40399#top).
 * [TokenInput field: try alternative approach to fix screen reader focus issue](https://github.com/WordPress/gutenberg/pull/44526#top).
 * [Tools Panel: improve accessibility](https://github.com/WordPress/gutenberg/pull/40716#top)
   by addressing various labeling and focus loss problems.
 * [URLInput now always has an ID and accessible label](https://github.com/WordPress/gutenberg/pull/40310#top).
 * [Writing flow: Fix focus trap on certain input types](https://github.com/WordPress/gutenberg/pull/41538#top).
 * [WP post embed: missing labels and duplicate IDs](https://core.trac.wordpress.org/ticket/55664).

**Comments**

Comments now include proper contextual attributes for autocomplete fields, proper
labels for the visible text describing required fields, and improved accessibility(
and translatability) of the logged in as link.

 * [Comments: Remove aria-hidden=”true” attribute](https://core.trac.wordpress.org/ticket/55717)
   for visible text in comment template.
 * [Comments: Improve accessibility of the “Logged in as” link in comment form](https://core.trac.wordpress.org/ticket/55718).
 * [Comments: Add contextual autocomplete attributes to comment form fields.](https://core.trac.wordpress.org/ticket/55779)

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#accessibility](https://make.wordpress.org/core/tag/accessibility/),
[#dev-notes](https://make.wordpress.org/core/tag/dev-notes/), [#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/)

 [  ](https://profiles.wordpress.org/kadamwhite/) [K. Adam White](https://profiles.wordpress.org/kadamwhite/)
4:28 pm _on_ October 11, 2022     
Tags: [core-restapi ( 34 )](https://make.wordpress.org/core/tag/core-restapi/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1,
[rest-api ( 107 )](https://make.wordpress.org/core/tag/rest-api/)   

# 󠀁[Miscellaneous REST API improvements in WordPress 6.1](https://make.wordpress.org/core/2022/10/11/miscellaneous-rest-api-improvements-in-wordpress-6-1/)󠁿

## Search REST resources by ID across subtypes

WordPress 6.1 includes 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 search controller, [#56546](https://core.trac.wordpress.org/ticket/56546),
which makes it possible to retrieve a term or post object over the REST APIREST 
API The REST API is an acronym for the RESTful Application Program Interface (API)
that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end
of an application (think “phone app” or “website”) can communicate with the data
store (think “database” or “file system”) [https://developer.wordpress.org/rest-api/](https://developer.wordpress.org/rest-api/)
without knowing anything but that resource’s ID and object type.

`get_post` can retrieve a post of any post type so long as you know the post’s numeric
ID, and `get_term` can retrieve a term from any taxonomyTaxonomy A taxonomy is a
way to group things together. In WordPress, some common taxonomies are category,
link, tag, or post format. [https://codex.wordpress.org/Taxonomies#Default_Taxonomies](https://codex.wordpress.org/Taxonomies#Default_Taxonomies)..
Because REST objects are segregated by post type-specific endpoints, however, there
has not been a clear way to get a Post with ID 78 if you don’t know whether it is
a `page`, `post`, or `my-cpt`.

The coreCore Core is the set of software required to run WordPress. The Core Development
Team builds WordPress. `/search` endpoint now supports `?include` and `?exclude`
parameters which take a list of IDs, and limit results to posts matching those IDs.

Examples:

 * To get post 78 when you don’t know its post type,
    - `/wp/v2/search?include=78`
 * To get posts 78 and 79 only if they are in the `page` post type,
    - `/wp/v2/search?include=78,79&subtype=page`
 * To search posts excluding post 78,
    - `/wp/v2/search?exclude=78`
 * To get term 87,
    - `/wp/v2/search?type=term&include=78`
 * To get term 87 only if it is a categoryCategory The 'category' taxonomy lets 
   you group posts / content together that share a common bond. Categories are pre-
   defined and broad ranging.,
    - `/wp/v2/search?type=term&include=78&subtype=category`
 * To search terms excluding terms 87 and 88,
    - `/wp/v2/search?exclude=87,88`

The search endpoint supports the `_embed` 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. parameter, so developers
can therefore use the search endpoint to retrieve a full post or term response object
in one request knowing only those object’s IDs.

As an example of how this could be used, imagine a custom 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. which relates to a specific post.
As of WordPress 6.1 developers can implement that block knowing only the related
post’s ID, and could then create a hook to search for that post by ID and retrieve
it using the Block Editor’s existing entity system:

    ```notranslate
    /**
     * Dictionary of requested items: keep an in-memory list of the type (if known)
     * for each requested ID, to limit unnecessary API requests.
     */
    const typeById = {};
    ​
    /**
     * Query for a post entity resource without knowing its post type.
     *
     * @param {number} id Numeric ID of a post resource of unknown subtype.
     * @returns {object|undefined} The requested post object, if found and loaded.
     */
    function usePostById( id ) {
        const type = typeById[ id ];
    ​
        useEffect( function() {
            if ( ! id || typeById[ id ] ) {
                return;
            }
    ​
            apiFetch( {
                path: `/wp/v2/search?type=post&include=${ id }&_fields=id,subtype`,
            } ).then( ( result ) => {
                if ( result.length ) {
                    typeById[ id ] = result[0].subtype;
                }
            } );
        }, [ id ] );
    ​
        return useSelect( function( select ) {
            if ( ! id || ! type ) {
                return undefined;
            }
            return select( 'core' ).getEntityRecord( 'postType', type, id );
        }, [ id, type ] );
    }
    ```

## Pretty-printing REST endpoint 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. responses

WordPress 6.1 also introduces support for returning pre-formatted JSON from the 
REST API. [#41998](https://core.trac.wordpress.org/ticket/41998) lets developers
request formatted JSON using a new `_pretty` query parameter or a filterFilter Filters
are one of the two types of Hooks [https://codex.wordpress.org/Plugin_API/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., particularly useful when querying via curl or other tools which do not 
provide an option to format responses.

To format the JSON returned from a specific endpoint request, append the `?_pretty`
query parameter to the endpoint URLURL A specific web address of a website or web
page on the Internet, such as a website’s URL www.wordpress.org.

To instruct WordPress to pretty-print all REST response bodies, a developer can 
use the `rest_json_encode_options` filter:

    ```notranslate
    function myproject_pretty_print_rest_responses( $options ) {
            $options |= JSON_PRETTY_PRINT;
    ​
            return $options;
    }
    add_filter( 'rest_json_encode_options', 'myproject_pretty_print_rest_responses', 10 );
    ```

A developer or site owner may also disable pretty-printing globally using the same
filter:

    ```notranslate
    function myproject_disable_rest_pretty_printing( $options ) {
            $options &= ~JSON_PRETTY_PRINT;
    ​
            return $options;
    }
    add_filter( 'rest_json_encode_options', 'myproject_disable_rest_pretty_printing', 10 );
    ```

Filters are applied after, and can override, the `_pretty` query parameter.

_Thanks to _[@spacedmonkey](https://profiles.wordpress.org/spacedmonkey/)_ for peer
review._

[#core-restapi](https://make.wordpress.org/core/tag/core-restapi/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/), [#rest-api](https://make.wordpress.org/core/tag/rest-api/)

 [  ](https://profiles.wordpress.org/milana_cap/) [Milana Cap](https://profiles.wordpress.org/milana_cap/)
2:33 pm _on_ October 11, 2022     
Tags: [6.1 ( 94 )](https://make.wordpress.org/core/tag/6-1/),
[dev-notes ( 621 )](https://make.wordpress.org/core/tag/dev-notes/), dev-notes-6.1,
[field guide ( 34 )](https://make.wordpress.org/core/tag/field-guide/), [performance ( 411 )](https://make.wordpress.org/core/tag/performance/)

# 󠀁[Performance Field Guide for WordPress 6.1](https://make.wordpress.org/core/2022/10/11/performance-field-guide-for-wordpress-6-1/)󠁿

WordPress 6.1 introduces a number of important performance improvements which will
have impact in all aspects. The most significant improvements are done in caching`
WP_Query` as well as 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/](https://developer.wordpress.org/rest-api/).

## **Improvements to WP_Query**

Database queries in WP_Query being cached is a long wanted feature for many developers
and finally a dream come true in WordPress 6.1. A couple of new functions will ensure
that users cache and linked objects for menu items are now primed while `get_page_by_title`
function will from now on use `WP_Query` and take the full advantage of all these
improvements.

> [Improvements to WP_Query performance in 6.1](https://make.wordpress.org/core/2022/10/07/improvements-to-wp_query-performance-in-6-1/)

TracTrac An open source project by Edgewall Software that serves as a bug tracker
and project management tool for WordPress. tickets holding these changes: [#22176](https://core.trac.wordpress.org/ticket/22176),
[#55716](https://core.trac.wordpress.org/ticket/55716), [#55620](https://core.trac.wordpress.org/ticket/55620),
[#36905](https://core.trac.wordpress.org/ticket/36905).

## **Improvements to REST API**

Priming caches in a single query will significantly improve Posts controller with
several new helper functions but that’s not all. User and comments controller will
benefit in a similar way while taxonomyTaxonomy A taxonomy is a way to group things
together. In WordPress, some common taxonomies are category, link, tag, or post 
format. [https://codex.wordpress.org/Taxonomies#Default_Taxonomies](https://codex.wordpress.org/Taxonomies#Default_Taxonomies).
and post type controllers are now going to `prepare_links` only when needed. This
control over `prepare_links` method will be available for custom controllers as 
well.

> [Performance improvements to the REST API](https://make.wordpress.org/core/2022/10/10/performance-improvements-to-the-rest-api/)

Trac tickets holding these changes: [#52992](https://core.trac.wordpress.org/ticket/52992),
[#56019](https://core.trac.wordpress.org/ticket/56019), [#56020](https://core.trac.wordpress.org/ticket/56020),
[#55592](https://core.trac.wordpress.org/ticket/55592), [#55593](https://core.trac.wordpress.org/ticket/55593),
[#55620](https://core.trac.wordpress.org/ticket/55620), [#55674](https://core.trac.wordpress.org/ticket/55674),
[#56272](https://core.trac.wordpress.org/ticket/56272).

## **Site Health improvements**

WordPress 6.1 will have two new Site Health checks – Persistent Object Cache and
Page Cache, along with a number of new filters. Find out more in dedicated Dev notedev
note Each important change in WordPress Core is documented in a developers note,(
usually called dev note). Good dev notes generally include a description of the 
change, the decision that led to this change, and a description of how developers
are supposed to work with that change. Dev notes are published on Make/Core blog
during the beta phase of WordPress release cycle. Publishing dev notes is particularly
important when plugin/theme authors and WordPress developers need to be aware of
those changes.In general, all dev notes are compiled into a Field Guide at the beginning
of the release candidate phase..

> [New cache Site Health checks in WordPress 6.1](https://make.wordpress.org/core/2022/10/06/new-cache-site-health-checks-in-wordpress-6-1/)

Trac tickets holding these changes: [#56040](https://core.trac.wordpress.org/ticket/56040),
[#56041](https://core.trac.wordpress.org/ticket/56041).

## **Improvements to multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site**

In WordPress 6.1 the networknetwork (versus site, blog) options functions have been
updated to be consistent with other metadata types, support for `register_meta` 
is added, prime caching network options in a single query, string main site ID in
network options and more.

> [Multisite improvements in WordPress 6.1](https://make.wordpress.org/core/2022/10/10/multisite-improvements-in-wordpress-6-1/)

Trac tickets holding these changes: [#37181](https://core.trac.wordpress.org/ticket/37181),
[#55802](https://core.trac.wordpress.org/ticket/55802).

## **Bootstrap/Load**

The order of action 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.
is slightly changed in order to gain more control over caching behavior, preloading
assets and conditionally executing redirects.

> [Moving the send_headers action to later in the load](https://make.wordpress.org/core/2022/10/10/moving-the-send_headers-action-to-later-in-the-load/)

Trac ticketticket Created for both bug reports and feature development on the bug
tracker. holding these changes: [#56068](https://core.trac.wordpress.org/ticket/56068).

## **Improvements to Cache 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.**

Cache API improvements bring validating cache keys in `WP_Object_Cache` methods,
deleting cache by group and making a number of private cache priming functions public,
and thus, available for usage in plugins and themes.

A valid cache key must be either an integer number or a non-empty string. This will
prevent silent failing in `wp_cache_*()` functions, done by a quick type check and
adding a `_doing_it_wrong()` message if the string is empty, `false`, or `null`.
Also, a check in `update_user_caches()` and `clean_user_cache()` will make sure 
that the email is not empty before being cached or removed from cache. Read more
in [#56198](https://core.trac.wordpress.org/ticket/56198).

Several private cache priming functions for various object types are now public 
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/](https://wordpress.org/plugins/)
or can be cost-based plugin from a third-party. and theme authors are encouraged
to use these functions to improve the performance of their code by reducing the 
number of database queries. These functions are:

 * `_prime_post_caches()`
 * `_prime_term_caches()`
 * `_prime_comment_caches()`
 * `_prime_network_caches()`
 * `_prime_site_caches()`
 * `_get_non_cached_ids()`

 Read more in [#56386](https://core.trac.wordpress.org/ticket/56386).

### Introducing `**wp_cache_flush_group()**` function

If you wanted to delete cached item with `wp_cache_delete` you had to specify the
item’s ID, or you had to flush the entire cache with `wp_cache_flush`. WordPress
6.1 introduces a new plugable function called `wp_cache_flush_group` which removes
all cache items in a group, if the object cache implementation supports it.

### Introducing `**wp_cache_supports()**` function

Developers can now detect if their current implementation of an object cache supports
flushing by group, by calling `wp_cache_supports( $feature )` which returns true
if the feature is supported. Third-party object cache plugins can declare a `wp_cache_supports()`
function and correctly list their supported features:

 * `add_multiple`
 * `set_multiple`
 * `get_multiple`
 * `delete_multiple`
 * `flush_runtime`
 * `flush_group`

Note: The `wp_cache_supports()` function replaces and supersedes the `wp_cache_supports_group_flush()`
function added in [#4476](https://core.trac.wordpress.org/ticket/4476).

Read more in [#56605](https://core.trac.wordpress.org/ticket/56605).

## **Media improvements**

WordPress 6.1 will add `decoding="async"` to image attributes, along with new `wp_img_tag_add_decoding_attr()`
function and `wp_img_tag_add_decoding_attr` filterFilter Filters are one of the 
two types of Hooks [https://codex.wordpress.org/Plugin_API/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.. Read more in [#53232](https://core.trac.wordpress.org/ticket/53232).

Query-attachments AJAX endpoint now caches the parent post objects. Read more in
[#56037](https://core.trac.wordpress.org/ticket/56037).

`WP_Media_List_Table` class will call `update_post_parent_caches` function in order
to prime parent caches in a single database request. Read more in [#56036](https://core.trac.wordpress.org/ticket/56036).

Added caching to `wp_count_attachments()` for better consistency with `wp_count_posts()`.
Read more in [#55227](https://core.trac.wordpress.org/ticket/55227).

Avoid duplicated query when retrieving empty posts collections. Read more in [#55677](https://core.trac.wordpress.org/ticket/55677).

## **Post, Post Types improvements**

In WordPress 6.1 `WP_Posts_List_Table` class will call `update_post_author_caches`
function in order to prime post author caches in a single database request. Read
more in [#56100](https://core.trac.wordpress.org/ticket/56100).

A new filter `post_class_taxonomies` will allow developers to reduce the number 
of taxonomies for which classes term classes are generated. Read more in [#37114](https://core.trac.wordpress.org/ticket/37114).

Sites running persistent object caching will have result of database queries in `
_find_post_by_old_slug` and `_find_post_by_old_date` functions, cached. Read more
in [#36723](https://core.trac.wordpress.org/ticket/36723).

## **Editor**

Additional build task `copy:block-json` will convert and store all `block.json` 
files in a single `blocks-json.php` which will prevent all of this from happening
for every 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 each page load.

> [Improved PHP performance for core blocks registration](https://make.wordpress.org/core/2022/10/07/improved-php-performance-for-core-blocks-registration/)

Trac ticket holding these changes: [#55005](https://core.trac.wordpress.org/ticket/55005).

### **Database**

Identifiers (such as Table and Field names) are escaped with the `%i` placeholder
which will prevent SQL Injection Vulnerabilities and provide a small performance
improvement.

> [Escaping Table and Field names with wpdb::prepare() in WordPress 6.1](https://make.wordpress.org/core/2022/10/08/escaping-table-and-field-names-with-wpdbprepare-in-wordpress-6-1/)

Trac ticket holding these changes: [#52506](https://core.trac.wordpress.org/ticket/52506).

## **Other performance improvements**

### **Administration**

Performance of `WP_List_Table::get_column_info()` is improved by adding the primary
column to the cached 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. values ([#34564](https://core.trac.wordpress.org/ticket/34564)).

### **Cron API**

In 6.1 wp-cron will be non-blocking for LiteSpeed LSAPI ([#54668](https://core.trac.wordpress.org/ticket/54668)).

### **Taxonomy**

Retain default term option when unregistering taxonomies and adjustments to handling
default terms for custom taxonomies ([#54472](https://core.trac.wordpress.org/ticket/54472)).

### **Themes**

Two new actions are wrapping the process of loading a template file (`load_template`)–`
wp_before_load_template` and `wp_after_load_template` ([#54541](https://core.trac.wordpress.org/ticket/54541)).

### **Script loader**

New filter `wp_preload_resources` enables resource preloading with `rel='preload'`(
[#42438](https://core.trac.wordpress.org/ticket/42438)).

### **Users**

Prime user 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. in WP_User_Query ([#55594](https://core.trac.wordpress.org/ticket/55594)).

_Thanks to _[@spacedmonkey](https://profiles.wordpress.org/spacedmonkey/), [@tweetythierry](https://profiles.wordpress.org/tweetythierry/),
and [@tillkruess](https://profiles.wordpress.org/tillkruess/)_ for peer review._

[#6-1](https://make.wordpress.org/core/tag/6-1/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-6-1](https://make.wordpress.org/core/tag/dev-notes-6-1/), [#field-guide](https://make.wordpress.org/core/tag/field-guide/),
[#performance](https://make.wordpress.org/core/tag/performance/)

# Post navigation

[← Older posts](https://make.wordpress.org/core/tag/dev-notes-6-1/page/2/?output_format=md)