block_editor_rest_api_preload() – Preloads common data used with the block editor by specifying an array of REST API paths that will be preloaded for a given block editor context.

You appear to be a bot. Output may be restricted

Description

Preloads common data used with the block editor by specifying an array of REST API paths that will be preloaded for a given block editor context.

Usage

block_editor_rest_api_preload( $preload_paths, $block_editor_context );

Parameters

$preload_paths
( string[] ) required – List of paths to preload.
$block_editor_context
( WP_Block_Editor_Context ) required – The current block editor context.

Returns

void

Source

File name: wordpress/wp-includes/block-editor.php
Lines:

1 to 78 of 78
function block_editor_rest_api_preload( array $preload_paths, $block_editor_context ) {
  global $post, $wp_scripts, $wp_styles;

  
/**
 * Filters the array of REST API paths that will be used to preloaded common data for the block editor.
 *
 * @since 5.8.0
 *
 * @param string[]                $preload_paths        Array of paths to preload.
 * @param WP_Block_Editor_Context $block_editor_context The current block editor context.
 */
  $preload_paths = apply_filters( 'block_editor_rest_api_preload_paths', $preload_paths, $block_editor_context );

  if ( ! empty( $block_editor_context->post ) ) {
    $selected_post = $block_editor_context->post;

    
/**
 * Filters the array of paths that will be preloaded.
 *
 * Preload common data by specifying an array of REST API paths that will be preloaded.
 *
 * @since 5.0.0
 * @deprecated 5.8.0 Use the {@see 'block_editor_rest_api_preload_paths'} filter instead.
 *
 * @param string[] $preload_paths Array of paths to preload.
 * @param WP_Post  $selected_post Post being edited.
 */
    $preload_paths = apply_filters_deprecated( 'block_editor_preload_paths', array( $preload_paths, $selected_post ), '5.8.0', 'block_editor_rest_api_preload_paths' );
  }

  if ( empty( $preload_paths ) ) {
    return;
  }

  /*
	 * Ensure the global $post, $wp_scripts, and $wp_styles remain the same after
	 * API data is preloaded.
	 * Because API preloading can call the_content and other filters, plugins
	 * can unexpectedly modify the global $post or enqueue assets which are not
	 * intended for the block editor.
	 */
  $backup_global_post = ! empty( $post ) ? clone $post : $post;
  $backup_wp_scripts  = ! empty( $wp_scripts ) ? clone $wp_scripts : $wp_scripts;
  $backup_wp_styles   = ! empty( $wp_styles ) ? clone $wp_styles : $wp_styles;

  foreach ( $preload_paths as &$path ) {
    if ( is_string( $path ) && ! str_starts_with( $path, '/' ) ) {
      $path = '/' . $path;
      continue;
    }

    if ( is_array( $path ) && is_string( $path[0] ) && ! str_starts_with( $path[0], '/' ) ) {
      $path[0] = '/' . $path[0];
    }
  }

  unset( $path );

  $preload_data = array_reduce(
    $preload_paths,
    'rest_preload_api_request',
    array()
  );

  // Restore the global $post, $wp_scripts, and $wp_styles as they were before API preloading.
  $post       = $backup_global_post;
  $wp_scripts = $backup_wp_scripts;
  $wp_styles  = $backup_wp_styles;

  wp_add_inline_script(
    'wp-api-fetch',
    sprintf(
      'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
      wp_json_encode( $preload_data )
    ),
    'after'
  );
}
 

 View on GitHub View on Trac