Make WordPress Core

Changeset 59958


Ignore:
Timestamp:
03/10/2025 10:32:56 AM (17 months ago)
Author:
Mamaduka
Message:

Editor: Update preload paths for post and site editor.

Preloading all blocking requests ensures that the editor canvas becomes responsive quickly and that the browser avoids unnecessary client-side requests.

Props mamaduka, joemcgill, audrasjb, peterwilsoncc.
Fixes #63050.

Location:
trunk/src/wp-admin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/edit-form-blocks.php

    r59795 r59958  
    5454$active_theme                   = get_stylesheet();
    5555$global_styles_endpoint_context = current_user_can( 'edit_theme_options' ) ? 'edit' : 'view';
     56$template_lookup_slug           = 'page' === $post->post_type ? 'page' : 'single-' . $post->post_type;
     57if ( ! empty( $post->post_name ) ) {
     58        $template_lookup_slug .= '-' . $post->post_name;
     59}
    5660// Preload common data.
    5761$preload_paths = array(
     
    8084         */
    8185        '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id() . '?context=' . $global_styles_endpoint_context,
     86        // Used by getBlockPatternCategories in useBlockEditorSettings.
     87        '/wp/v2/block-patterns/categories',
     88        // @see packages/core-data/src/entities.js
     89        '/?_fields=' . implode(
     90                ',',
     91                array(
     92                        'description',
     93                        'gmt_offset',
     94                        'home',
     95                        'name',
     96                        'site_icon',
     97                        'site_icon_url',
     98                        'site_logo',
     99                        'timezone_string',
     100                        'url',
     101                        'page_for_posts',
     102                        'page_on_front',
     103                        'show_on_front',
     104                )
     105        ),
     106        $paths[] = add_query_arg(
     107                'slug',
     108                // @see https://github.com/WordPress/gutenberg/blob/e093fefd041eb6cc4a4e7f67b92ab54fd75c8858/packages/core-data/src/private-selectors.ts#L244-L254
     109                $template_lookup_slug,
     110                '/wp/v2/templates/lookup'
     111        ),
    82112);
    83113
  • trunk/src/wp-admin/site-editor.php

    r59850 r59958  
    140140}
    141141
    142 $block_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-site' ) );
     142$context_settings = array( 'name' => 'core/edit-site' );
     143
     144if ( ! empty( $_GET['postId'] ) && is_numeric( $_GET['postId'] ) ) {
     145        $context_settings['post'] = get_post( (int) $_GET['postId'] );
     146} elseif ( isset( $_GET['p'] ) && preg_match( '/^\/page\/(\d+)$/', $_GET['p'], $matches ) ) {
     147        $context_settings['post'] = get_post( (int) $matches[1] );
     148}
     149
     150$block_editor_context = new WP_Block_Editor_Context( $context_settings );
    143151$custom_settings      = array(
    144152        'siteUrl'                   => site_url(),
     
    200208                'GET',
    201209        ),
    202 );
     210        '/wp/v2/settings',
     211        array( '/wp/v2/settings', 'OPTIONS' ),
     212        // Used by getBlockPatternCategories in useBlockEditorSettings.
     213        '/wp/v2/block-patterns/categories',
     214        // @see packages/core-data/src/entities.js
     215        '/?_fields=' . implode(
     216                ',',
     217                array(
     218                        'description',
     219                        'gmt_offset',
     220                        'home',
     221                        'name',
     222                        'site_icon',
     223                        'site_icon_url',
     224                        'site_logo',
     225                        'timezone_string',
     226                        'url',
     227                        'page_for_posts',
     228                        'page_on_front',
     229                        'show_on_front',
     230                )
     231        ),
     232);
     233
     234if ( $block_editor_context->post ) {
     235        $route_for_post = rest_get_route_for_post( $block_editor_context->post );
     236        if ( $route_for_post ) {
     237                $preload_paths[] = add_query_arg( 'context', 'edit', $route_for_post );
     238                if ( 'page' === $block_editor_context->post->post_type ) {
     239                        $preload_paths[] = add_query_arg(
     240                                'slug',
     241                                // @see https://github.com/WordPress/gutenberg/blob/e093fefd041eb6cc4a4e7f67b92ab54fd75c8858/packages/core-data/src/private-selectors.ts#L244-L254
     242                                empty( $block_editor_context->post->post_name ) ? 'page' : 'page-' . $post->post_name,
     243                                '/wp/v2/templates/lookup'
     244                        );
     245                }
     246        }
     247} else {
     248        $preload_paths[] = '/wp/v2/templates/lookup?slug=front-page';
     249        $preload_paths[] = '/wp/v2/templates/lookup?slug=home';
     250}
    203251
    204252block_editor_rest_api_preload( $preload_paths, $block_editor_context );
Note: See TracChangeset for help on using the changeset viewer.