From afd5c26bfa648c6a3632cb32bbee08a98ee325a1 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Fri, 26 Nov 2021 15:15:05 +0800 Subject: [PATCH 1/2] Extract to separate function --- lib/full-site-editing/edit-site-page.php | 35 ++++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/full-site-editing/edit-site-page.php b/lib/full-site-editing/edit-site-page.php index 8a02d2755c1e2a..7878642abb8fb4 100644 --- a/lib/full-site-editing/edit-site-page.php +++ b/lib/full-site-editing/edit-site-page.php @@ -76,21 +76,7 @@ function gutenberg_get_editor_styles() { return $styles; } -/** - * Initialize the Gutenberg Templates List Page. - * - * @param array $settings The editor settings. - */ -function gutenberg_edit_site_list_init( $settings ) { - wp_enqueue_script( 'wp-edit-site' ); - wp_enqueue_style( 'wp-edit-site' ); - wp_enqueue_media(); - - $post_type = get_post_type_object( $_GET['postType'] ); - - if ( ! $post_type ) { - wp_die( __( 'Invalid post type.', 'gutenberg' ) ); - } +function gutenberg_edit_site_list_preload_data( $post_type ) { $preload_data = array_reduce( array( @@ -111,6 +97,25 @@ function gutenberg_edit_site_list_init( $settings ) { ), 'after' ); +} + +/** + * Initialize the Gutenberg Templates List Page. + * + * @param array $settings The editor settings. + */ +function gutenberg_edit_site_list_init( $settings ) { + wp_enqueue_script( 'wp-edit-site' ); + wp_enqueue_style( 'wp-edit-site' ); + wp_enqueue_media(); + + $post_type = get_post_type_object( $_GET['postType'] ); + + if ( ! $post_type ) { + wp_die( __( 'Invalid post type.', 'gutenberg' ) ); + } + + gutenberg_edit_site_list_preload_data( $post_type ); wp_add_inline_script( 'wp-edit-site', From c42fa60fbaab329ada544c8b0c7ba088c661b392 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Fri, 26 Nov 2021 16:16:45 +0800 Subject: [PATCH 2/2] Add preloading for template list associated data --- lib/full-site-editing/edit-site-page.php | 62 ++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/lib/full-site-editing/edit-site-page.php b/lib/full-site-editing/edit-site-page.php index 7878642abb8fb4..2d8ea2e6995082 100644 --- a/lib/full-site-editing/edit-site-page.php +++ b/lib/full-site-editing/edit-site-page.php @@ -76,14 +76,66 @@ function gutenberg_get_editor_styles() { return $styles; } +/** + * Preloads data for the templates list page. + * + * @param WP_Post_Type $post_type The post type that the list page will show. + */ function gutenberg_edit_site_list_preload_data( $post_type ) { + $posts_path = "/wp/v2/$post_type->rest_base?context=edit&per_page=-1"; + $path = untrailingslashit( $posts_path ); + $path_parts = parse_url( $path ); + $request = new WP_REST_Request( 'GET', $path_parts['path'] ); + + if ( ! empty( $path_parts['query'] ) ) { + parse_str( $path_parts['query'], $query_params ); + $request->set_query_params( $query_params ); + } + + $dynamic_preload_requests = array(); + $response = rest_do_request( $request ); + + if ( 200 === $response->status ) { + $server = rest_get_server(); + $posts = (array) $server->response_to_data( $response, false ); + + foreach ( $posts as $post_data ) { + if ( ! empty( $post_data['author'] ) ) { + $author_id = $post_data['author']; + $dynamic_preload_requests[] = "/wp/v2/users/$author_id?context=edit"; + } + + if ( 'wp_template' === $post_data['type'] || 'wp_template_part' === $post_data['type'] ) { + $has_theme_origin_or_source = + ( ! empty( $post_data['source'] ) && 'theme' === $post_data['source'] ) || + ( ! empty( $post_data['origin'] ) && 'theme' === $post_data['origin'] ); + + if ( $has_theme_origin_or_source ) { + $theme_id = $post_data['theme']; + $dynamic_preload_requests[] = "/wp/v2/themes/$theme_id?context=edit"; + } + + $has_plugin_origin_or_source = + ( ! empty( $post_data['source'] ) && 'plugin' === $post_data['source'] ) || + ( ! empty( $post_data['origin'] ) && 'plugin' === $post_data['origin'] ); + + if ( $has_plugin_origin_or_source ) { + $plugin_id = $post_data['theme']; + $dynamic_preload_requests[] = "/wp/v2/plugins/$plugin_id?context=edit"; + } + } + } + } $preload_data = array_reduce( - array( - '/', - "/wp/v2/types/$post_type->name?context=edit", - '/wp/v2/types?context=edit', - "/wp/v2/$post_type->rest_base?context=edit&per_page=-1", + array_merge( + array( + '/', + "/wp/v2/types/$post_type->name?context=edit", + '/wp/v2/types?context=edit', + $posts_path, + ), + array_unique( $dynamic_preload_requests ) ), 'rest_preload_api_request', array()