From 56145f874aa9a85ace59693b1ce161cee2df745e Mon Sep 17 00:00:00 2001 From: gziolo Date: Fri, 21 Apr 2023 10:43:25 +0000 Subject: [PATCH] Editor: Add selectors field to block type definition Adds support for the new selectors property for block types. It adds it to the allowed metadata when registering a block type, makes the WP_Block_Type class aware of it, exposes it through the block types REST API, and the get_block_editor_server_block_settings function. Corresponding work in the Gutenberg plugin: https://github.com/WordPress/gutenberg/pull/46496. Fixes #57585. Props aaronrobertshaw, hellofromTonya. Built from https://develop.svn.wordpress.org/trunk@55673 git-svn-id: http://core.svn.wordpress.org/trunk@55185 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/post.php | 2 ++ wp-includes/blocks.php | 2 ++ wp-includes/class-wp-block-type.php | 10 ++++++++++ .../class-wp-rest-block-types-controller.php | 11 +++++++++++ wp-includes/version.php | 2 +- 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php index 824b9694507..e86cdce43e0 100644 --- a/wp-admin/includes/post.php +++ b/wp-admin/includes/post.php @@ -2178,6 +2178,7 @@ function taxonomy_meta_box_sanitize_cb_input( $taxonomy, $terms ) { * of a block relevant for client registration. * * @since 5.0.0 + * @since 6.3.0 Added `selectors` field. * * @return array An associative array of registered block data. */ @@ -2192,6 +2193,7 @@ function get_block_editor_server_block_settings() { 'attributes' => 'attributes', 'provides_context' => 'providesContext', 'uses_context' => 'usesContext', + 'selectors' => 'selectors', 'supports' => 'supports', 'category' => 'category', 'styles' => 'styles', diff --git a/wp-includes/blocks.php b/wp-includes/blocks.php index 8a20f29e3bd..49f18ca46f8 100644 --- a/wp-includes/blocks.php +++ b/wp-includes/blocks.php @@ -300,6 +300,7 @@ function get_block_metadata_i18n_schema() { * @since 5.7.0 Added support for `textdomain` field and i18n handling for all translatable fields. * @since 5.9.0 Added support for `variations` and `viewScript` fields. * @since 6.1.0 Added support for `render` field. + * @since 6.3.0 Added `selectors` field. * * @param string $file_or_folder Path to the JSON file with metadata definition for * the block or path to the folder where the `block.json` file is located. @@ -382,6 +383,7 @@ function register_block_type_from_metadata( $file_or_folder, $args = array() ) { 'attributes' => 'attributes', 'providesContext' => 'provides_context', 'usesContext' => 'uses_context', + 'selectors' => 'selectors', 'supports' => 'supports', 'styles' => 'styles', 'variations' => 'variations', diff --git a/wp-includes/class-wp-block-type.php b/wp-includes/class-wp-block-type.php index 3b3787740a1..1fb8894164a 100644 --- a/wp-includes/class-wp-block-type.php +++ b/wp-includes/class-wp-block-type.php @@ -117,6 +117,14 @@ class WP_Block_Type { */ public $variations = array(); + /** + * Custom CSS selectors for theme.json style generation. + * + * @since 6.3.0 + * @var array + */ + public $selectors = array(); + /** * Supported features. * @@ -245,6 +253,7 @@ class WP_Block_Type { * @since 6.1.0 Added the `editor_script_handles`, `script_handles`, `view_script_handles, * `editor_style_handles`, and `style_handles` properties. * Deprecated the `editor_script`, `script`, `view_script`, `editor_style`, and `style` properties. + * @since 6.3.0 Added the `selectors` property. * * @see register_block_type() * @@ -268,6 +277,7 @@ class WP_Block_Type { * @type string|null $textdomain The translation textdomain. * @type array[] $styles Alternative block styles. * @type array[] $variations Block variations. + * @type array $selectors Custom CSS selectors for theme.json style generation. * @type array|null $supports Supported features. * @type array|null $example Structured data for the block preview. * @type callable|null $render_callback Block type render callback. diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php index e1f34baef6d..26bd0e05449 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php @@ -237,6 +237,7 @@ public function get_item( $request ) { * * @since 5.5.0 * @since 5.9.0 Renamed `$block_type` to `$item` to match parent class for PHP 8 named parameter support. + * @since 6.3.0 Added `selectors` field. * * @param WP_Block_Type $item Block type data. * @param WP_REST_Request $request Full details about the request. @@ -278,6 +279,7 @@ public function prepare_item_for_response( $item, $request ) { 'ancestor', 'provides_context', 'uses_context', + 'selectors', 'supports', 'styles', 'textdomain', @@ -379,6 +381,7 @@ protected function prepare_links( $block_type ) { * Retrieves the block type' schema, conforming to JSON Schema. * * @since 5.5.0 + * @since 6.3.0 Added `selectors` field. * * @return array Item schema data. */ @@ -518,6 +521,14 @@ public function get_item_schema() { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'selectors' => array( + 'description' => __( 'Custom CSS selectors.' ), + 'type' => 'object', + 'default' => array(), + 'properties' => array(), + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ), 'supports' => array( 'description' => __( 'Block supports.' ), 'type' => 'object', diff --git a/wp-includes/version.php b/wp-includes/version.php index 5804db9278f..d8bbbe9e35c 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.3-alpha-55672'; +$wp_version = '6.3-alpha-55673'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.