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

Editor: Prevent frontend assets from being enqueued in block editor #2312

Closed
Closed
Changes from all commits
Commits
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
22 changes: 15 additions & 7 deletions src/wp-includes/block-editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -425,15 +425,17 @@ function get_block_editor_settings( array $custom_settings, $block_editor_contex
*
* @since 5.8.0
*
* @global WP_Post $post Global post object.
* @global WP_Post $post Global post object.
* @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts.
* @global WP_Styles $wp_styles The WP_Styles object for printing styles.
*
* @param string[] $preload_paths List of paths to preload.
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
*
* @return void
*/
function block_editor_rest_api_preload( array $preload_paths, $block_editor_context ) {
global $post;
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.
Expand Down Expand Up @@ -467,11 +469,15 @@ function block_editor_rest_api_preload( array $preload_paths, $block_editor_cont
}

/*
* Ensure the global $post remains the same after API data is preloaded.
* 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 $post.
* 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, '/' ) ) {
Expand All @@ -480,7 +486,7 @@ function block_editor_rest_api_preload( array $preload_paths, $block_editor_cont
}

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

Expand All @@ -492,8 +498,10 @@ function block_editor_rest_api_preload( array $preload_paths, $block_editor_cont
array()
);

// Restore the global $post as it was before API preloading.
$post = $backup_global_post;
// 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',
Expand Down