From c4c223359d86e9f0f49cd150dac3e8b09850762f Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Wed, 8 Jan 2025 14:05:27 +0400 Subject: [PATCH 1/5] Try: New default rendering mode for editor via post type supports --- ...tenberg-rest-post-types-controller-6-8.php | 61 ------------------- lib/compat/wordpress-6.8/post.php | 60 ------------------ lib/compat/wordpress-6.8/rest-api.php | 15 ----- lib/load.php | 2 - .../editor/src/components/provider/index.js | 24 +++++--- 5 files changed, 16 insertions(+), 146 deletions(-) delete mode 100644 lib/compat/wordpress-6.8/class-gutenberg-rest-post-types-controller-6-8.php delete mode 100644 lib/compat/wordpress-6.8/post.php diff --git a/lib/compat/wordpress-6.8/class-gutenberg-rest-post-types-controller-6-8.php b/lib/compat/wordpress-6.8/class-gutenberg-rest-post-types-controller-6-8.php deleted file mode 100644 index da0489210e21f1..00000000000000 --- a/lib/compat/wordpress-6.8/class-gutenberg-rest-post-types-controller-6-8.php +++ /dev/null @@ -1,61 +0,0 @@ -default_rendering_mode, $item ); - - /** - * Filters the block editor rendering mode for a specific post type. - * Applied after the generic `post_type_default_rendering_mode` filter. - * - * The dynamic portion of the hook name, `$item->name`, refers to the post type slug. - * - * @since 6.8.0 - * @param string $default_rendering_mode Default rendering mode for the post type. - * @param WP_Post_Type $post_type Post type object. - * @return string Default rendering mode for the post type. - */ - $rendering_mode = apply_filters( "post_type_{$item->name}_default_rendering_mode", $rendering_mode, $item ); - - // Validate the filtered rendering mode. - if ( ! in_array( $rendering_mode, gutenberg_post_type_rendering_modes(), true ) ) { - $rendering_mode = 'post-only'; - } - - $response->data['default_rendering_mode'] = $rendering_mode; - } - - return rest_ensure_response( $response ); - } -} diff --git a/lib/compat/wordpress-6.8/post.php b/lib/compat/wordpress-6.8/post.php deleted file mode 100644 index be842d89b51519..00000000000000 --- a/lib/compat/wordpress-6.8/post.php +++ /dev/null @@ -1,60 +0,0 @@ -register_routes(); - } -} -add_action( 'rest_api_init', 'gutenberg_add_post_type_rendering_mode' ); - // When querying terms for a given taxonomy in the REST API, respect the default // query arguments set for that taxonomy upon registration. function gutenberg_respect_taxonomy_default_args_in_rest_api( $args ) { diff --git a/lib/load.php b/lib/load.php index 371f9c54e5fc4a..b145d44376280f 100644 --- a/lib/load.php +++ b/lib/load.php @@ -44,7 +44,6 @@ function gutenberg_is_experiment_enabled( $name ) { // WordPress 6.8 compat. require __DIR__ . '/compat/wordpress-6.8/block-comments.php'; require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-rest-comment-controller-6-8.php'; - require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-rest-post-types-controller-6-8.php'; require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-hierarchical-sort.php'; require __DIR__ . '/compat/wordpress-6.8/rest-api.php'; @@ -98,7 +97,6 @@ function gutenberg_is_experiment_enabled( $name ) { require __DIR__ . '/compat/wordpress-6.8/preload.php'; require __DIR__ . '/compat/wordpress-6.8/blocks.php'; require __DIR__ . '/compat/wordpress-6.8/functions.php'; -require __DIR__ . '/compat/wordpress-6.8/post.php'; require __DIR__ . '/compat/wordpress-6.8/site-editor.php'; require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-rest-user-controller.php'; diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index 133a52e2ce01bc..59767aba750a32 100644 --- a/packages/editor/src/components/provider/index.js +++ b/packages/editor/src/components/provider/index.js @@ -180,15 +180,23 @@ export const ExperimentalEditorProvider = withRegistryProvider( getRenderingMode, __unstableIsEditorReady, } = select( editorStore ); - const { getEntitiesConfig } = select( coreStore ); + const { + getEntitiesConfig, + getPostType, + hasFinishedResolution, + } = select( coreStore ); - const postTypeObject = select( coreStore ).getPostType( - post.type + const postTypeSupports = getPostType( post.type )?.supports; + const _hasLoadedPostObject = hasFinishedResolution( + 'getPostType', + [ post.type ] ); - const _hasLoadedPostObject = select( - coreStore - ).hasFinishedResolution( 'getPostType', [ post.type ] ); + const _defaultMode = Array.isArray( postTypeSupports?.editor ) + ? postTypeSupports.editor.find( + ( features ) => 'default_mode' in features + )?.default_mode + : undefined; return { hasLoadedPostObject: _hasLoadedPostObject, @@ -196,8 +204,8 @@ export const ExperimentalEditorProvider = withRegistryProvider( isReady: __unstableIsEditorReady(), mode: getRenderingMode(), defaultMode: - hasTemplate && postTypeObject?.default_rendering_mode - ? postTypeObject?.default_rendering_mode + hasTemplate && _defaultMode + ? _defaultMode : 'post-only', selection: getEditorSelection(), postTypeEntities: From ec9d76f12710064e7749fe27dd1fcf497e9d619f Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Wed, 8 Jan 2025 17:34:23 +0400 Subject: [PATCH 2/5] Update 'isReady' condition --- packages/editor/src/components/provider/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index 59767aba750a32..a3f2eabdcb13c7 100644 --- a/packages/editor/src/components/provider/index.js +++ b/packages/editor/src/components/provider/index.js @@ -171,7 +171,6 @@ export const ExperimentalEditorProvider = withRegistryProvider( mode, defaultMode, postTypeEntities, - hasLoadedPostObject, } = useSelect( ( select ) => { const { @@ -187,7 +186,7 @@ export const ExperimentalEditorProvider = withRegistryProvider( } = select( coreStore ); const postTypeSupports = getPostType( post.type )?.supports; - const _hasLoadedPostObject = hasFinishedResolution( + const hasLoadedPostObject = hasFinishedResolution( 'getPostType', [ post.type ] ); @@ -199,9 +198,8 @@ export const ExperimentalEditorProvider = withRegistryProvider( : undefined; return { - hasLoadedPostObject: _hasLoadedPostObject, editorSettings: getEditorSettings(), - isReady: __unstableIsEditorReady(), + isReady: __unstableIsEditorReady() && hasLoadedPostObject, mode: getRenderingMode(), defaultMode: hasTemplate && _defaultMode @@ -342,7 +340,7 @@ export const ExperimentalEditorProvider = withRegistryProvider( // Register the editor commands. useCommands(); - if ( ! isReady || ! mode || ! hasLoadedPostObject ) { + if ( ! isReady || ! mode ) { return null; } From 523b32cd159e446ae18605d0250b6005391b60b0 Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Thu, 9 Jan 2025 13:47:03 +0400 Subject: [PATCH 3/5] Add client-side validation --- packages/editor/src/components/provider/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index a3f2eabdcb13c7..81435d966b44e4 100644 --- a/packages/editor/src/components/provider/index.js +++ b/packages/editor/src/components/provider/index.js @@ -56,6 +56,11 @@ const NON_CONTEXTUAL_POST_TYPES = [ 'wp_template_part', ]; +/** + * These are rendering modes that the editor supports. + */ +const RENDERING_MODES = [ 'post-only', 'template-locked' ]; + /** * Depending on the post, template and template mode, * returns the appropriate blocks and change handlers for the block editor provider. @@ -196,13 +201,14 @@ export const ExperimentalEditorProvider = withRegistryProvider( ( features ) => 'default_mode' in features )?.default_mode : undefined; + const hasDefaultMode = RENDERING_MODES.includes( _defaultMode ); return { editorSettings: getEditorSettings(), isReady: __unstableIsEditorReady() && hasLoadedPostObject, mode: getRenderingMode(), defaultMode: - hasTemplate && _defaultMode + hasTemplate && hasDefaultMode ? _defaultMode : 'post-only', selection: getEditorSelection(), From ef0b73226af0ffeedb961a998679595ff5d5c57a Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Thu, 9 Jan 2025 14:37:24 +0400 Subject: [PATCH 4/5] Restore default rendering mode for Pages --- lib/compat/wordpress-6.8/post.php | 26 ++++++++++++++++++++++++++ lib/load.php | 1 + 2 files changed, 27 insertions(+) create mode 100644 lib/compat/wordpress-6.8/post.php diff --git a/lib/compat/wordpress-6.8/post.php b/lib/compat/wordpress-6.8/post.php new file mode 100644 index 00000000000000..50324766488992 --- /dev/null +++ b/lib/compat/wordpress-6.8/post.php @@ -0,0 +1,26 @@ + 'template-locked', + ); + } + + return $args; +} +add_action( 'register_page_post_type_args', 'gutenberg_update_page_editor_support' ); diff --git a/lib/load.php b/lib/load.php index b145d44376280f..69ba59e3718842 100644 --- a/lib/load.php +++ b/lib/load.php @@ -97,6 +97,7 @@ function gutenberg_is_experiment_enabled( $name ) { require __DIR__ . '/compat/wordpress-6.8/preload.php'; require __DIR__ . '/compat/wordpress-6.8/blocks.php'; require __DIR__ . '/compat/wordpress-6.8/functions.php'; +require __DIR__ . '/compat/wordpress-6.8/post.php'; require __DIR__ . '/compat/wordpress-6.8/site-editor.php'; require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-rest-user-controller.php'; From c5882366ef3d8aaa2c883cd2f842ebc3b7dab802 Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Wed, 15 Jan 2025 15:46:26 +0400 Subject: [PATCH 5/5] Add backport changelog entry --- backport-changelog/6.8/8123.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 backport-changelog/6.8/8123.md diff --git a/backport-changelog/6.8/8123.md b/backport-changelog/6.8/8123.md new file mode 100644 index 00000000000000..bfb291a55f15e9 --- /dev/null +++ b/backport-changelog/6.8/8123.md @@ -0,0 +1,3 @@ +https://github.com/WordPress/wordpress-develop/pull/8123 + +* https://github.com/WordPress/gutenberg/pull/68549