[wp-trac] [WordPress Trac] #65021: Fatal error in _wp_get_iframed_editor_assets(): wp_print_media_templates not found

WordPress Trac noreply at wordpress.org
Fri Apr 3 14:15:52 UTC 2026


#65021: Fatal error in _wp_get_iframed_editor_assets(): wp_print_media_templates
not found
--------------------------+-----------------------------
 Reporter:  manuelurak    |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Customize     |    Version:  6.9.4
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 When opening the Customizer, a fatal error occurs:

 Fatal error: call_user_func_array(): Argument #1 ($callback) must be
 a valid callback, function "wp_print_media_templates" not found

 The function _wp_get_iframed_editor_assets() in block-editor.php
 creates an isolated script context and calls wp_print_footer_scripts(),
 which fires the print_media_templates action. However, media-template.php
 is not loaded in this isolated context, so wp_print_media_templates()
 is undefined.

 Fix: Add a require_once for media-template.php before
 wp_print_footer_scripts()
 inside _wp_get_iframed_editor_assets().

 Here is my temporary fix for the function:

 {{{#!php
 <?php
 function _wp_get_iframed_editor_assets() {
         global $wp_styles, $wp_scripts;

         // Keep track of the styles and scripts instance to restore later.
         $current_wp_styles  = $wp_styles;
         $current_wp_scripts = $wp_scripts;

         // Create new instances to collect the assets.
         $wp_styles  = new WP_Styles();
         $wp_scripts = new WP_Scripts();

         /*
          * Register all currently registered styles and scripts. The
 actions that
          * follow enqueue assets, but don't necessarily register them.
          */
         $wp_styles->registered  = $current_wp_styles->registered;
         $wp_scripts->registered = $current_wp_scripts->registered;

         /*
          * We generally do not need reset styles for the iframed editor.
          * However, if it's a classic theme, margins will be added to
 every block,
          * which is reset specifically for list items, so classic themes
 rely on
          * these reset styles.
          */
         $wp_styles->done =
                 wp_theme_has_theme_json() ? array( 'wp-reset-editor-
 styles' ) : array();

         wp_enqueue_script( 'wp-polyfill' );
         // Enqueue the `editorStyle` handles for all core block, and
 dependencies.
         wp_enqueue_style( 'wp-edit-blocks' );

         if ( current_theme_supports( 'wp-block-styles' ) ) {
                 wp_enqueue_style( 'wp-block-library-theme' );
         }

         /*
          * We don't want to load EDITOR scripts in the iframe, only
 enqueue
          * front-end assets for the content.
          */
         add_filter( 'should_load_block_editor_scripts_and_styles',
 '__return_false' );
         do_action( 'enqueue_block_assets' );
         remove_filter( 'should_load_block_editor_scripts_and_styles',
 '__return_false' );

         $block_registry = WP_Block_Type_Registry::get_instance();

         /*
          * Additionally, do enqueue `editorStyle` assets for all blocks,
 which
          * contains editor-only styling for blocks (editor content).
          */
         foreach ( $block_registry->get_all_registered() as $block_type ) {
                 if ( isset( $block_type->editor_style_handles ) &&
 is_array( $block_type->editor_style_handles ) ) {
                         foreach ( $block_type->editor_style_handles as
 $style_handle ) {
                                 wp_enqueue_style( $style_handle );
                         }
                 }
         }

         /**
          * Remove the deprecated `print_emoji_styles` handler.
          * It avoids breaking style generation with a deprecation message.
          */
         $has_emoji_styles = has_action( 'wp_print_styles',
 'print_emoji_styles' );
         if ( $has_emoji_styles ) {
                 remove_action( 'wp_print_styles', 'print_emoji_styles' );
         }

         ob_start();
         wp_print_styles();
         wp_print_font_faces();
         wp_print_font_faces_from_style_variations();
         $styles = ob_get_clean();

         if ( $has_emoji_styles ) {
                 add_action( 'wp_print_styles', 'print_emoji_styles' );
         }

         ob_start();
         wp_print_head_scripts();
         if ( ! function_exists( 'wp_print_media_templates' ) ) {
                 require_once ABSPATH . WPINC . '/media-template.php';
         }
         wp_print_footer_scripts();
         $scripts = ob_get_clean();

         // Restore the original instances.
         $wp_styles  = $current_wp_styles;
         $wp_scripts = $current_wp_scripts;

         return array(
                 'styles'  => $styles,
                 'scripts' => $scripts,
         );
 }
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/65021>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list