From 9eea02e31b5c875896d84fb4d5c277c1d46e97ad Mon Sep 17 00:00:00 2001 From: gziolo Date: Wed, 31 Jan 2024 09:11:17 +0000 Subject: [PATCH] Editor: Add `viewStyle` property to `block.json` for frontend-only block styles Related issue in Gutenberg: https://github.com/WordPress/gutenberg/issues/54491. For block scripts there was already `script`, `viewScript` and `editorScript`. For block styles there was only `style` and `editorStyle`. This brings the parity. Props gaambo. Fixes #59673. Built from https://develop.svn.wordpress.org/trunk@57493 git-svn-id: http://core.svn.wordpress.org/trunk@56994 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/blocks.php | 3 +++ wp-includes/class-wp-block-type.php | 10 ++++++++++ wp-includes/class-wp-block.php | 6 ++++++ .../class-wp-rest-block-types-controller.php | 11 +++++++++++ wp-includes/version.php | 2 +- 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/wp-includes/blocks.php b/wp-includes/blocks.php index b7b806fd47..fdf97545f7 100644 --- a/wp-includes/blocks.php +++ b/wp-includes/blocks.php @@ -64,6 +64,7 @@ function generate_block_asset_handle( $block_name, $field_name, $index = 0 ) { 'viewScript' => 'view-script', 'editorStyle' => 'editor-style', 'style' => 'style', + 'viewStyle' => 'view-style', ); $asset_handle = str_replace( '/', '-', $block_name ) . '-' . $field_mappings[ $field_name ]; @@ -326,6 +327,7 @@ function get_block_metadata_i18n_schema() { * @since 6.1.0 Added support for `render` field. * @since 6.3.0 Added `selectors` field. * @since 6.4.0 Added support for `blockHooks` field. + * @since 6.5.0 Added support for `viewStyle` 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. @@ -503,6 +505,7 @@ function register_block_type_from_metadata( $file_or_folder, $args = array() ) { $style_fields = array( 'editorStyle' => 'editor_style_handles', 'style' => 'style_handles', + 'viewStyle' => 'view_style_handles', ); foreach ( $style_fields as $metadata_field_name => $settings_field_name ) { if ( ! empty( $settings[ $metadata_field_name ] ) ) { diff --git a/wp-includes/class-wp-block-type.php b/wp-includes/class-wp-block-type.php index 6ad8ebcd67..5bdcee1504 100644 --- a/wp-includes/class-wp-block-type.php +++ b/wp-includes/class-wp-block-type.php @@ -234,6 +234,14 @@ class WP_Block_Type { */ public $style_handles = array(); + /** + * Block type front end only style handles. + * + * @since 6.5.0 + * @var string[] + */ + public $view_style_handles = array(); + /** * Deprecated block type properties for script and style handles. * @@ -278,6 +286,7 @@ class WP_Block_Type { * Deprecated the `editor_script`, `script`, `view_script`, `editor_style`, and `style` properties. * @since 6.3.0 Added the `selectors` property. * @since 6.4.0 Added the `block_hooks` property. + * @since 6.5.0 Added the `view_style_handles` property. * * @see register_block_type() * @@ -315,6 +324,7 @@ class WP_Block_Type { * @type string[] $view_script_handles Block type front end only script handles. * @type string[] $editor_style_handles Block type editor only style handles. * @type string[] $style_handles Block type front end and editor style handles. + * @type string[] $view_style_handles Block type front end only style handles. * } */ public function __construct( $block_type, $args = array() ) { diff --git a/wp-includes/class-wp-block.php b/wp-includes/class-wp-block.php index 65d3af6a12..f7bf912f42 100644 --- a/wp-includes/class-wp-block.php +++ b/wp-includes/class-wp-block.php @@ -280,6 +280,12 @@ class WP_Block { } } + if ( ( ! empty( $this->block_type->view_style_handles ) ) ) { + foreach ( $this->block_type->view_style_handles as $view_style_handle ) { + wp_enqueue_style( $view_style_handle ); + } + } + /** * Filters the content of a single block. * 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 852143d96e..9e8ba9e929 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 @@ -292,6 +292,7 @@ class WP_REST_Block_Types_Controller extends WP_REST_Controller { 'view_script_handles', 'editor_style_handles', 'style_handles', + 'view_style_handles', 'variations', 'block_hooks', ), @@ -602,6 +603,16 @@ class WP_REST_Block_Types_Controller extends WP_REST_Controller { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'view_style_handles' => array( + 'description' => __( 'Public facing style handles.' ), + 'type' => array( 'array' ), + 'default' => array(), + 'items' => array( + 'type' => 'string', + ), + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ), 'styles' => array( 'description' => __( 'Block style variations.' ), 'type' => 'array', diff --git a/wp-includes/version.php b/wp-includes/version.php index 66ea978826..5be115df92 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.5-alpha-57492'; +$wp_version = '6.5-alpha-57493'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.