Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Set editor rendering mode by post type #62304

Merged
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
ab4b075
Add Post_Types_Controller compat class. Add rendering_mode parameter …
TylerB24890 Jun 4, 2024
ca0de5d
Add the rendering_mode property to the post type object properties
TylerB24890 Jun 4, 2024
3beef1e
Check that the rendering_mode property exists before attempting to ac…
TylerB24890 Jun 4, 2024
9b276d2
Fix PHP filters from overriding one another. Implement the defaultRen…
TylerB24890 Jun 4, 2024
a26a583
Remove unnecessary optional chain inside conditional
TylerB24890 Jun 4, 2024
b538ae6
Dont override the rendering_mode value if set during post type regist…
TylerB24890 Jun 4, 2024
e3912d4
Move all code to a new 6.7 compat directory. Update the post type pro…
TylerB24890 Jun 5, 2024
702a5be
Update rendering_mode filters to always be prefixed with post_type_
TylerB24890 Jun 6, 2024
964a148
Remove the editor mode props from the individual editors (site + post…
TylerB24890 Jun 6, 2024
aabbca8
Merge latest trunk and resolve conflicts.
TylerB24890 Jun 6, 2024
c9f2274
Merge latest trunk and resolve conflicts
TylerB24890 Jun 10, 2024
298c858
Prevent rendering editor until mode constant is defined.
TylerB24890 Jun 10, 2024
d85f56c
Add validation for rendering modes passed to post types.
TylerB24890 Jun 10, 2024
9c631fe
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Jun 11, 2024
de00c45
Use a single useSelect() hook
TylerB24890 Jun 11, 2024
bf3fbca
Set default rendering mode for pages to template-locked
TylerB24890 Jun 11, 2024
5c98bf6
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Jun 12, 2024
40c2fa3
Use post.type as hook dependency instead of full post object
TylerB24890 Jun 12, 2024
c2b1f92
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Jun 13, 2024
1f7ff09
Fix since documentation. Fix array standard.
TylerB24890 Jun 13, 2024
40ce652
Update rendering_modes function name to be prefixed with post_type_
TylerB24890 Jun 13, 2024
b361cd5
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Jun 28, 2024
24118c7
Merge latest trunk & resolve conflicts
TylerB24890 Jul 18, 2024
a0a766c
Create new setRenderingMode playwright utility to reset the rendering…
TylerB24890 Jul 18, 2024
882f69c
evaluate the page before attempting to access global variables
TylerB24890 Jul 18, 2024
a2ac4b3
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Jul 18, 2024
3496d55
Add rendering mode parameter to the setRenderingMode utility
TylerB24890 Jul 18, 2024
65c264b
check if active theme is block theme
Sidsector9 Jul 30, 2024
a27c07e
fix broken test
Sidsector9 Jul 30, 2024
ac9556d
Merge pull request #1 from Sidsector9/pr-62304-fixes
Sidsector9 Jul 30, 2024
148837e
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Aug 2, 2024
3619aed
Add core backport changelog entry
TylerB24890 Aug 2, 2024
b080013
Adjust order of rendering_mode filters
TylerB24890 Aug 2, 2024
c07a005
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Aug 5, 2024
42bbbae
Merge latest trunk & resolve conflicts
TylerB24890 Aug 16, 2024
f38b926
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Aug 20, 2024
5d9a3f4
Set the editor rendering mode when a page is created for the performa…
TylerB24890 Aug 20, 2024
4967bf0
write setEditorRenderingMode method for playwright performance tests
TylerB24890 Aug 20, 2024
e44556d
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
TylerB24890 Aug 20, 2024
7e72459
Fix the rendering mode switcher for performance tests
TylerB24890 Aug 21, 2024
1b18340
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
fabiankaegy Nov 14, 2024
a55cd68
fix move files to 6.8 compat folder
fabiankaegy Nov 14, 2024
429b338
fix move to 6.8 folder
fabiankaegy Nov 14, 2024
d523598
fix reset test overrides
fabiankaegy Nov 14, 2024
41601ec
fix reset whitespace changes
fabiankaegy Nov 14, 2024
05abd41
fix reset whitespace changes
fabiankaegy Nov 14, 2024
4904b5a
fix reset whitespace
fabiankaegy Nov 14, 2024
40d7324
fix reset change of if condition
fabiankaegy Nov 14, 2024
c2d58a9
fix ensure post type object has loaded before editor renders
fabiankaegy Nov 14, 2024
9e8e08c
fix remove template-lock rendering mode
fabiankaegy Nov 14, 2024
b94e309
Fix root post loading
youknowriad Nov 15, 2024
a742e4a
fix only apply default rendering mode on load
fabiankaegy Nov 15, 2024
fcb1449
fix: Expose rendering mode to mobile editor
dcalhoun Nov 15, 2024
ec543c5
test: Mobile editor mocks getPostType resolution
dcalhoun Nov 15, 2024
2aa288d
attempt to fix performance tests by forcing `post-only` rendering mod…
fabiankaegy Nov 15, 2024
f0c680f
Merge branch 'trunk' into feature/post-type-rendering-mode-58038
fabiankaegy Nov 19, 2024
557ec18
fix remove unused passed argument from useSpecificEditorSettings call
fabiankaegy Nov 19, 2024
9068ab1
fix clean up performance tests by moving rendering mode change into i…
fabiankaegy Nov 19, 2024
4512fce
simplify performance tests for rendering mode
fabiankaegy Nov 19, 2024
f282a47
fix move backport file to correct folder
fabiankaegy Nov 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
/**
* REST API: Gutenberg_REST_Post_Types_Controller_6_6 class
*
* @package gutenberg
*/

/**
* Gutenberg_REST_Post_Types_Controller_6_6 class
*
* Add Block Editor default rendering mode to the post type response
* to allow enabling/disabling at the post type level.
*/
class Gutenberg_REST_Post_Types_Controller_6_6 extends WP_REST_Post_Types_Controller {
fabiankaegy marked this conversation as resolved.
Show resolved Hide resolved
/**
* Add Block Editor default rendering mode setting to the response.
*
* @param WP_Post_Type $item Post type object.
* @param WP_REST_Request $request Request object.
* @return WP_REST_Response Response object.
*/
public function prepare_item_for_response( $item, $request ) {
$response = parent::prepare_item_for_response( $item, $request );
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';

// Property will only exist if the post type supports the block editor.
if ( 'edit' === $context && property_exists( $item, 'rendering_mode' ) ) {
/**
* Filters the block editor rendering mode for a specific post type.
*
* The dynamic portion of the hook name, `$item->name`, refers to the post type slug.
*
* @since 6.6.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( "{$item->name}_default_rendering_mode", $item->rendering_mode, $item );

/**
* Filters the block editor rendering mode for a post type.
*
* @since 6.6.0
* @param string $default_rendering_mode Default rendering mode for the post type.
* @param string $post_type Post type name.
* @return string Default rendering mode for the post type.
*/
$response->data['rendering_mode'] = apply_filters( 'post_type_default_rendering_mode', $rendering_mode, $item->name );
}

return rest_ensure_response( $response );
}
}
21 changes: 20 additions & 1 deletion lib/compat/wordpress-6.6/post.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,28 @@
function gutenberg_add_excerpt_support_to_wp_block() {
add_post_type_support( 'wp_block', 'excerpt' );
}

add_action( 'init', 'gutenberg_add_excerpt_support_to_wp_block' );

/**
* Add the rendering_mode property to the WP_Post_Type object.
* This property can be overwritten by using the post_type_default_rendering_mode filter.
*
* @param array $args Array of post type arguments.
* @return array Updated array of post type arguments.
*/
function gutenberg_post_type_default_rendering_mode( $args ) {
if (
( isset( $args['show_in_rest'] ) && $args['show_in_rest'] ) &&
( isset( $args['supports'] ) && in_array( 'editor', $args['supports'], true ) ) &&
( ! isset( $args['rendering_mode'] ) )
) {
$args['rendering_mode'] = 'post-only';
fabiankaegy marked this conversation as resolved.
Show resolved Hide resolved
}

return $args;
}
add_filter( 'register_post_type_args', 'gutenberg_post_type_default_rendering_mode', 10, 1 );

/**
* Updates the labels for the template post type.
*
Expand Down
10 changes: 10 additions & 0 deletions lib/compat/wordpress-6.6/rest-api.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ function gutenberg_add_class_list_to_public_post_types() {
}
add_action( 'rest_api_init', 'gutenberg_add_class_list_to_public_post_types' );

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_6();
$controller->register_routes();
}
}
add_action( 'rest_api_init', 'gutenberg_add_post_type_rendering_mode' );

/**
* Registers the Global Styles Revisions REST API routes.
Expand Down
1 change: 1 addition & 0 deletions lib/load.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ function gutenberg_is_experiment_enabled( $name ) {
// WordPress 6.6 compat.
require __DIR__ . '/compat/wordpress-6.6/class-gutenberg-rest-global-styles-revisions-controller-6-6.php';
require __DIR__ . '/compat/wordpress-6.6/class-gutenberg-rest-templates-controller-6-6.php';
require __DIR__ . '/compat/wordpress-6.6/class-gutenberg-rest-post-types-controller-6-6.php';
require __DIR__ . '/compat/wordpress-6.6/rest-api.php';

// Plugin specific code.
Expand Down
18 changes: 16 additions & 2 deletions packages/edit-post/src/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,28 @@ function Editor( {
initialEdits,
...props
} ) {
// Get the rendering mode for the post type.
const postTypeRenderingMode = useSelect(
TylerB24890 marked this conversation as resolved.
Show resolved Hide resolved
( select ) => {
const postTypeObject =
select( coreStore ).getPostType( initialPostType );
if ( postTypeObject && postTypeObject?.rendering_mode ) {
return postTypeObject.rendering_mode;
}

return 'post-only';
},
[ initialPostType ]
);

const {
currentPost,
onNavigateToEntityRecord,
onNavigateToPreviousEntityRecord,
} = useNavigateToEntityRecord(
initialPostId,
initialPostType,
'post-only'
postTypeRenderingMode
);

const { post, template } = useSelect(
Expand Down Expand Up @@ -78,7 +92,7 @@ function Editor( {
...settings,
onNavigateToEntityRecord,
onNavigateToPreviousEntityRecord,
defaultRenderingMode: 'post-only',
defaultRenderingMode: postTypeRenderingMode,
} ),
[ settings, onNavigateToEntityRecord, onNavigateToPreviousEntityRecord ]
);
Expand Down
Loading