render_block_core_file

The timeline below displays how wordpress function render_block_core_file has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Server-side rendering of the `core/file` block.
 *
 * @package WordPress
 */
/**
 * When the `core/file` block is rendering, check if we need to enqueue the `wp-block-file-view` script.
 *
 * @param array    $attributes The block attributes.
 * @param string   $content    The block content.
 * @param WP_Block $block      The parsed block.
 *
 * @return string Returns the block content.
 */
function render_block_core_file($attributes, $content)
{
    // Update object's aria-label attribute if present in block HTML.
    // Match an aria-label attribute from an object tag.
    $pattern = '@<object.+(?<attribute>aria-label="(?<filename>[^"]+)?")@i';
    $content = preg_replace_callback($pattern, static function ($matches) {
        $filename = (!empty($matches['filename'])) ? $matches['filename'] : '';
        $has_filename = !empty($filename) && 'PDF embed' !== $filename;
        $label = $has_filename ? sprintf(
            /* translators: %s: filename. */
            __('Embed of %s.'),
            $filename
        ) : __('PDF embed');
        return str_replace($matches['attribute'], sprintf('aria-label="%s"', $label), $matches[0]);
    }, $content);
    // If it's interactive, enqueue the script module and add the directives.
    if (!empty($attributes['displayPreview'])) {
        $suffix = wp_scripts_get_suffix();
        if (defined('IS_GUTENBERG_PLUGIN') && IS_GUTENBERG_PLUGIN) {
            $module_url = gutenberg_url('/build/interactivity/file.min.js');
        }
        wp_register_script_module('@wordpress/block-library/file', isset($module_url) ? $module_url : includes_url("blocks/file/view{$suffix}.js"), array('@wordpress/interactivity'), defined('GUTENBERG_VERSION') ? GUTENBERG_VERSION : get_bloginfo('version'));
        wp_enqueue_script_module('@wordpress/block-library/file');
        $processor = new WP_HTML_Tag_Processor($content);
        $processor->next_tag();
        $processor->set_attribute('data-wp-interactive', 'core/file');
        $processor->next_tag('object');
        $processor->set_attribute('data-wp-bind--hidden', '!state.hasPdfPreview');
        $processor->set_attribute('hidden', true);
        return $processor->get_updated_html();
    }
    return $content;
}

WordPress Version: 6.4

/**
 * Server-side rendering of the `core/file` block.
 *
 * @package WordPress
 */
/**
 * When the `core/file` block is rendering, check if we need to enqueue the `wp-block-file-view` script.
 *
 * @param array    $attributes The block attributes.
 * @param string   $content    The block content.
 * @param WP_Block $block      The parsed block.
 *
 * @return string Returns the block content.
 */
function render_block_core_file($attributes, $content, $block)
{
    $should_load_view_script = !empty($attributes['displayPreview']);
    $view_js_file = 'wp-block-file-view';
    // If the script already exists, there is no point in removing it from viewScript.
    if (!wp_script_is($view_js_file)) {
        $script_handles = $block->block_type->view_script_handles;
        // If the script is not needed, and it is still in the `view_script_handles`, remove it.
        if (!$should_load_view_script && in_array($view_js_file, $script_handles, true)) {
            $block->block_type->view_script_handles = array_diff($script_handles, array($view_js_file));
        }
        // If the script is needed, but it was previously removed, add it again.
        if ($should_load_view_script && !in_array($view_js_file, $script_handles, true)) {
            $block->block_type->view_script_handles = array_merge($script_handles, array($view_js_file));
        }
    }
    // Update object's aria-label attribute if present in block HTML.
    // Match an aria-label attribute from an object tag.
    $pattern = '@<object.+(?<attribute>aria-label="(?<filename>[^"]+)?")@i';
    $content = preg_replace_callback($pattern, static function ($matches) {
        $filename = (!empty($matches['filename'])) ? $matches['filename'] : '';
        $has_filename = !empty($filename) && 'PDF embed' !== $filename;
        $label = $has_filename ? sprintf(
            /* translators: %s: filename. */
            __('Embed of %s.'),
            $filename
        ) : __('PDF embed');
        return str_replace($matches['attribute'], sprintf('aria-label="%s"', $label), $matches[0]);
    }, $content);
    // If it uses the Interactivity API, add the directives.
    if ($should_load_view_script) {
        $processor = new WP_HTML_Tag_Processor($content);
        $processor->next_tag();
        $processor->set_attribute('data-wp-interactive', '');
        $processor->next_tag('object');
        $processor->set_attribute('data-wp-bind--hidden', '!selectors.core.file.hasPdfPreview');
        $processor->set_attribute('hidden', true);
        return $processor->get_updated_html();
    }
    return $content;
}

WordPress Version: 6.3

/**
 * When the `core/file` block is rendering, check if we need to enqueue the `'wp-block-file-view` script.
 *
 * @param array    $attributes The block attributes.
 * @param string   $content    The block content.
 * @param WP_Block $block      The parsed block.
 *
 * @return string Returns the block content.
 */
function render_block_core_file($attributes, $content, $block)
{
    $should_load_view_script = !empty($attributes['displayPreview']);
    $view_js_file = 'wp-block-file-view';
    // If the script already exists, there is no point in removing it from viewScript.
    if (!wp_script_is($view_js_file)) {
        $script_handles = $block->block_type->view_script_handles;
        // If the script is not needed, and it is still in the `view_script_handles`, remove it.
        if (!$should_load_view_script && in_array($view_js_file, $script_handles, true)) {
            $block->block_type->view_script_handles = array_diff($script_handles, array($view_js_file));
        }
        // If the script is needed, but it was previously removed, add it again.
        if ($should_load_view_script && !in_array($view_js_file, $script_handles, true)) {
            $block->block_type->view_script_handles = array_merge($script_handles, array($view_js_file));
        }
    }
    // Update object's aria-label attribute if present in block HTML.
    // Match an aria-label attribute from an object tag.
    $pattern = '@<object.+(?<attribute>aria-label="(?<filename>[^"]+)?")@i';
    $content = preg_replace_callback($pattern, static function ($matches) {
        $filename = (!empty($matches['filename'])) ? $matches['filename'] : '';
        $has_filename = !empty($filename) && 'PDF embed' !== $filename;
        $label = $has_filename ? sprintf(
            /* translators: %s: filename. */
            __('Embed of %s.'),
            $filename
        ) : __('PDF embed');
        return str_replace($matches['attribute'], sprintf('aria-label="%s"', $label), $matches[0]);
    }, $content);
    // If it uses the Interactivity API, add the directives.
    if (defined('IS_GUTENBERG_PLUGIN') && IS_GUTENBERG_PLUGIN && $should_load_view_script) {
        $processor = new WP_HTML_Tag_Processor($content);
        $processor->next_tag();
        $processor->set_attribute('data-wp-interactive', '');
        $processor->next_tag('object');
        $processor->set_attribute('data-wp-bind--hidden', '!selectors.core.file.hasPdfPreview');
        $processor->set_attribute('hidden', true);
        return $processor->get_updated_html();
    }
    return $content;
}

WordPress Version: 6.1

/**
 * Server-side rendering of the `core/file` block.
 *
 * @package WordPress
 */
/**
 * When the `core/file` block is rendering, check if we need to enqueue the `'wp-block-file-view` script.
 *
 * @param array  $attributes The block attributes.
 * @param string $content    The block content.
 *
 * @return string Returns the block content.
 */
function render_block_core_file($attributes, $content)
{
    $should_load_view_script = !empty($attributes['displayPreview']) && !wp_script_is('wp-block-file-view');
    if ($should_load_view_script) {
        wp_enqueue_script('wp-block-file-view');
    }
    // Update object's aria-label attribute if present in block HTML.
    // Match an aria-label attribute from an object tag.
    $pattern = '@<object.+(?<attribute>aria-label="(?<filename>[^"]+)?")@i';
    $content = preg_replace_callback($pattern, function ($matches) {
        $filename = (!empty($matches['filename'])) ? $matches['filename'] : '';
        $has_filename = !empty($filename) && 'PDF embed' !== $filename;
        $label = $has_filename ? sprintf(
            /* translators: %s: filename. */
            __('Embed of %s.'),
            $filename
        ) : __('PDF embed');
        return str_replace($matches['attribute'], sprintf('aria-label="%s"', $label), $matches[0]);
    }, $content);
    return $content;
}

WordPress Version: 5.8

/**
 * Server-side rendering of the `core/file` block.
 *
 * @package WordPress
 */
/**
 * When the `core/file` block is rendering, check if we need to enqueue the `'wp-block-file-view` script.
 *
 * @param array $attributes The block attributes.
 * @param array $content    The block content.
 *
 * @return string Returns the block content.
 */
function render_block_core_file($attributes, $content)
{
    $should_load_view_script = !empty($attributes['displayPreview']) && !wp_script_is('wp-block-file-view');
    if ($should_load_view_script) {
        wp_enqueue_script('wp-block-file-view');
    }
    return $content;
}