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 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 index be842d89b51519..50324766488992 100644 --- a/lib/compat/wordpress-6.8/post.php +++ b/lib/compat/wordpress-6.8/post.php @@ -1,60 +1,26 @@ 'template-locked', + ); } return $args; } -add_filter( 'register_post_type_args', 'gutenberg_post_type_default_rendering_mode', 10, 2 ); +add_action( 'register_page_post_type_args', 'gutenberg_update_page_editor_support' ); diff --git a/lib/compat/wordpress-6.8/rest-api.php b/lib/compat/wordpress-6.8/rest-api.php index b94e42d5f2ccd0..cc3d3e89014e93 100644 --- a/lib/compat/wordpress-6.8/rest-api.php +++ b/lib/compat/wordpress-6.8/rest-api.php @@ -6,21 +6,6 @@ * @package gutenberg */ -if ( ! defined( 'ABSPATH' ) ) { - die( 'Silence is golden.' ); -} - -if ( ! function_exists( 'gutenberg_add_post_type_rendering_mode' ) ) { - /** - * Add Block Editor default rendering mode to the post type response. - */ - function gutenberg_add_post_type_rendering_mode() { - $controller = new Gutenberg_REST_Post_Types_Controller_6_8(); - $controller->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..69ba59e3718842 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'; diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index 133a52e2ce01bc..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. @@ -171,7 +176,6 @@ export const ExperimentalEditorProvider = withRegistryProvider( mode, defaultMode, postTypeEntities, - hasLoadedPostObject, } = useSelect( ( select ) => { const { @@ -180,24 +184,32 @@ 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; + const hasDefaultMode = RENDERING_MODES.includes( _defaultMode ); return { - hasLoadedPostObject: _hasLoadedPostObject, editorSettings: getEditorSettings(), - isReady: __unstableIsEditorReady(), + isReady: __unstableIsEditorReady() && hasLoadedPostObject, mode: getRenderingMode(), defaultMode: - hasTemplate && postTypeObject?.default_rendering_mode - ? postTypeObject?.default_rendering_mode + hasTemplate && hasDefaultMode + ? _defaultMode : 'post-only', selection: getEditorSelection(), postTypeEntities: @@ -334,7 +346,7 @@ export const ExperimentalEditorProvider = withRegistryProvider( // Register the editor commands. useCommands(); - if ( ! isReady || ! mode || ! hasLoadedPostObject ) { + if ( ! isReady || ! mode ) { return null; }