From e241f5a9c1705fdc4ca096599105fbef699478d6 Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Mon, 19 Jan 2026 21:33:59 +0900 Subject: [PATCH] Make format control restrictions experimental --- lib/experimental/editor-settings.php | 3 +++ lib/experiments-page.php | 12 ++++++++++++ .../block-editor/src/components/rich-text/index.js | 4 +++- .../src/components/rich-text/use-format-types.js | 8 +++++++- .../src/hooks/block-fields/rich-text/index.js | 3 ++- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/experimental/editor-settings.php b/lib/experimental/editor-settings.php index 3823ae58ea660e..62529fcad8bddd 100644 --- a/lib/experimental/editor-settings.php +++ b/lib/experimental/editor-settings.php @@ -49,6 +49,9 @@ function gutenberg_enable_experiments() { if ( gutenberg_is_experiment_enabled( 'gutenberg-media-editor' ) ) { wp_add_inline_script( 'wp-block-editor', 'window.__experimentalMediaEditor = true', 'before' ); } + if ( gutenberg_is_experiment_enabled( 'gutenberg-restrict-formatting-in-content-only-mode' ) ) { + wp_add_inline_script( 'wp-block-editor', 'window.__experimentalRestrictFormattingInContentOnlyMode = true', 'before' ); + } } add_action( 'admin_init', 'gutenberg_enable_experiments' ); diff --git a/lib/experiments-page.php b/lib/experiments-page.php index 6832a305848b1f..d29b74356c1439 100644 --- a/lib/experiments-page.php +++ b/lib/experiments-page.php @@ -258,6 +258,18 @@ function gutenberg_initialize_experiments_settings() { ) ); + add_settings_field( + 'gutenberg-restrict-formatting-in-content-only-mode', + __( 'Restrict formatting controls in Content Only mode', 'gutenberg' ), + 'gutenberg_display_experiment_field', + 'gutenberg-experiments', + 'gutenberg_experiments_section', + array( + 'label' => __( 'Restricts RichText formatting controls when in Content Only mode to provide a simpler, more focused editing experience while maintaining essential content functionality.', 'gutenberg' ), + 'id' => 'gutenberg-restrict-formatting-in-content-only-mode', + ) + ); + register_setting( 'gutenberg-experiments', 'gutenberg-experiments' diff --git a/packages/block-editor/src/components/rich-text/index.js b/packages/block-editor/src/components/rich-text/index.js index 52de9bb69d63a2..02e510ab29d33e 100644 --- a/packages/block-editor/src/components/rich-text/index.js +++ b/packages/block-editor/src/components/rich-text/index.js @@ -352,7 +352,9 @@ export function RichTextWrapper( identifier, allowedFormats: adjustedAllowedFormats, withoutInteractiveFormatting, - disableNoneEssentialFormatting: isContentOnly, + disableNoneEssentialFormatting: + isContentOnly && + window?.__experimentalRestrictFormattingInContentOnlyMode, } ); function addEditorOnlyFormats( value ) { diff --git a/packages/block-editor/src/components/rich-text/use-format-types.js b/packages/block-editor/src/components/rich-text/use-format-types.js index f6d55ea1cb9644..8dda027939ecc4 100644 --- a/packages/block-editor/src/components/rich-text/use-format-types.js +++ b/packages/block-editor/src/components/rich-text/use-format-types.js @@ -67,6 +67,8 @@ function getPrefixedSelectKeys( selected, prefix ) { * @param {Array} options.allowedFormats Allowed formats * @param {boolean} options.withoutInteractiveFormatting Whether to clean the interactive formatting or not. * @param {boolean} options.disableNoneEssentialFormatting Whether to disable none-essential formatting or not. + * This option is pnly available when "Restrict formatting + * controls in Content Only mode" experimental setting is enabled. */ export function useFormatTypes( { clientId, @@ -88,7 +90,11 @@ export function useFormatTypes( { return false; } - if ( disableNoneEssentialFormatting && ! isEssential ) { + if ( + disableNoneEssentialFormatting && + ! isEssential && + window?.__experimentalRestrictFormattingInContentOnlyMode + ) { return false; } diff --git a/packages/block-editor/src/hooks/block-fields/rich-text/index.js b/packages/block-editor/src/hooks/block-fields/rich-text/index.js index b019909138963d..9c695ae9d4ff5a 100644 --- a/packages/block-editor/src/hooks/block-fields/rich-text/index.js +++ b/packages/block-editor/src/hooks/block-fields/rich-text/index.js @@ -58,7 +58,8 @@ export default function RichTextControl( { identifier: field.id, allowedFormats: adjustedAllowedFormats, withoutInteractiveFormatting: fieldConfig?.withoutInteractiveFormatting, - disableNoneEssentialFormatting: true, + disableNoneEssentialFormatting: + window?.__experimentalRestrictFormattingInContentOnlyMode, } ); function addEditorOnlyFormats( value ) {