WordPress Version: 5.9
/**
* Inject the block editor assets that need to be loaded into the editor's iframe as an inline script.
*
* @since 5.8.0
*/
function wp_add_iframed_editor_assets_html()
{
global $pagenow;
if (!wp_should_load_block_editor_scripts_and_styles()) {
return;
}
$script_handles = array();
$style_handles = array('wp-block-editor', 'wp-block-library', 'wp-block-library-theme', 'wp-edit-blocks');
if ('widgets.php' === $pagenow || 'customize.php' === $pagenow) {
$style_handles[] = 'wp-widgets';
$style_handles[] = 'wp-edit-widgets';
}
$block_registry = WP_Block_Type_Registry::get_instance();
foreach ($block_registry->get_all_registered() as $block_type) {
if (!empty($block_type->style)) {
$style_handles[] = $block_type->style;
}
if (!empty($block_type->editor_style)) {
$style_handles[] = $block_type->editor_style;
}
if (!empty($block_type->script)) {
$script_handles[] = $block_type->script;
}
}
$style_handles = array_unique($style_handles);
$done = wp_styles()->done;
ob_start();
// We do not need reset styles for the iframed editor.
wp_styles()->done = array('wp-reset-editor-styles');
wp_styles()->do_items($style_handles);
wp_styles()->done = $done;
$styles = ob_get_clean();
$script_handles = array_unique($script_handles);
$done = wp_scripts()->done;
ob_start();
wp_scripts()->done = array();
wp_scripts()->do_items($script_handles);
wp_scripts()->done = $done;
$scripts = ob_get_clean();
$editor_assets = wp_json_encode(array('styles' => $styles, 'scripts' => $scripts));
echo "<script>window.__editorAssets = {$editor_assets}</script>";
}