wp_enqueue_block_style

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

WordPress Version: 6.4

/**
 * Enqueues a stylesheet for a specific block.
 *
 * If the theme has opted-in to separate-styles loading,
 * then the stylesheet will be enqueued on-render,
 * otherwise when the block inits.
 *
 * @since 5.9.0
 *
 * @param string $block_name The block-name, including namespace.
 * @param array  $args       {
 *     An array of arguments. See wp_register_style() for full information about each argument.
 *
 *     @type string           $handle The handle for the stylesheet.
 *     @type string|false     $src    The source URL of the stylesheet.
 *     @type string[]         $deps   Array of registered stylesheet handles this stylesheet depends on.
 *     @type string|bool|null $ver    Stylesheet version number.
 *     @type string           $media  The media for which this stylesheet has been defined.
 *     @type string|null      $path   Absolute path to the stylesheet, so that it can potentially be inlined.
 * }
 */
function wp_enqueue_block_style($block_name, $args)
{
    $args = wp_parse_args($args, array('handle' => '', 'src' => '', 'deps' => array(), 'ver' => false, 'media' => 'all'));
    /**
     * Callback function to register and enqueue styles.
     *
     * @param string $content When the callback is used for the render_block filter,
     *                        the content needs to be returned so the function parameter
     *                        is to ensure the content exists.
     * @return string Block content.
     */
    $callback = static function ($content) use ($args) {
        // Register the stylesheet.
        if (!empty($args['src'])) {
            wp_register_style($args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media']);
        }
        // Add `path` data if provided.
        if (isset($args['path'])) {
            wp_style_add_data($args['handle'], 'path', $args['path']);
            // Get the RTL file path.
            $rtl_file_path = str_replace('.css', '-rtl.css', $args['path']);
            // Add RTL stylesheet.
            if (file_exists($rtl_file_path)) {
                wp_style_add_data($args['handle'], 'rtl', 'replace');
                if (is_rtl()) {
                    wp_style_add_data($args['handle'], 'path', $rtl_file_path);
                }
            }
        }
        // Enqueue the stylesheet.
        wp_enqueue_style($args['handle']);
        return $content;
    };
    $hook = did_action('wp_enqueue_scripts') ? 'wp_footer' : 'wp_enqueue_scripts';
    if (wp_should_load_separate_core_block_assets()) {
        /**
         * Callback function to register and enqueue styles.
         *
         * @param string $content The block content.
         * @param array  $block   The full block, including name and attributes.
         * @return string Block content.
         */
        $callback_separate = static function ($content, $block) use ($block_name, $callback) {
            if (!empty($block['blockName']) && $block_name === $block['blockName']) {
                return $callback($content);
            }
            return $content;
        };
        /*
         * The filter's callback here is an anonymous function because
         * using a named function in this case is not possible.
         *
         * The function cannot be unhooked, however, users are still able
         * to dequeue the stylesheets registered/enqueued by the callback
         * which is why in this case, using an anonymous function
         * was deemed acceptable.
         */
        add_filter('render_block', $callback_separate, 10, 2);
        return;
    }
    /*
     * The filter's callback here is an anonymous function because
     * using a named function in this case is not possible.
     *
     * The function cannot be unhooked, however, users are still able
     * to dequeue the stylesheets registered/enqueued by the callback
     * which is why in this case, using an anonymous function
     * was deemed acceptable.
     */
    add_filter($hook, $callback);
    // Enqueue assets in the editor.
    add_action('enqueue_block_assets', $callback);
}

WordPress Version: 6.3

/**
 * Enqueues a stylesheet for a specific block.
 *
 * If the theme has opted-in to separate-styles loading,
 * then the stylesheet will be enqueued on-render,
 * otherwise when the block inits.
 *
 * @since 5.9.0
 *
 * @param string $block_name The block-name, including namespace.
 * @param array  $args       {
 *     An array of arguments. See wp_register_style() for full information about each argument.
 *
 *     @type string           $handle The handle for the stylesheet.
 *     @type string|false     $src    The source URL of the stylesheet.
 *     @type string[]         $deps   Array of registered stylesheet handles this stylesheet depends on.
 *     @type string|bool|null $ver    Stylesheet version number.
 *     @type string           $media  The media for which this stylesheet has been defined.
 * }
 */
function wp_enqueue_block_style($block_name, $args)
{
    $args = wp_parse_args($args, array('handle' => '', 'src' => '', 'deps' => array(), 'ver' => false, 'media' => 'all'));
    /**
     * Callback function to register and enqueue styles.
     *
     * @param string $content When the callback is used for the render_block filter,
     *                        the content needs to be returned so the function parameter
     *                        is to ensure the content exists.
     * @return string Block content.
     */
    $callback = static function ($content) use ($args) {
        // Register the stylesheet.
        if (!empty($args['src'])) {
            wp_register_style($args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media']);
        }
        // Add `path` data if provided.
        if (isset($args['path'])) {
            wp_style_add_data($args['handle'], 'path', $args['path']);
            // Get the RTL file path.
            $rtl_file_path = str_replace('.css', '-rtl.css', $args['path']);
            // Add RTL stylesheet.
            if (file_exists($rtl_file_path)) {
                wp_style_add_data($args['handle'], 'rtl', 'replace');
                if (is_rtl()) {
                    wp_style_add_data($args['handle'], 'path', $rtl_file_path);
                }
            }
        }
        // Enqueue the stylesheet.
        wp_enqueue_style($args['handle']);
        return $content;
    };
    $hook = did_action('wp_enqueue_scripts') ? 'wp_footer' : 'wp_enqueue_scripts';
    if (wp_should_load_separate_core_block_assets()) {
        /**
         * Callback function to register and enqueue styles.
         *
         * @param string $content The block content.
         * @param array  $block   The full block, including name and attributes.
         * @return string Block content.
         */
        $callback_separate = static function ($content, $block) use ($block_name, $callback) {
            if (!empty($block['blockName']) && $block_name === $block['blockName']) {
                return $callback($content);
            }
            return $content;
        };
        /*
         * The filter's callback here is an anonymous function because
         * using a named function in this case is not possible.
         *
         * The function cannot be unhooked, however, users are still able
         * to dequeue the stylesheets registered/enqueued by the callback
         * which is why in this case, using an anonymous function
         * was deemed acceptable.
         */
        add_filter('render_block', $callback_separate, 10, 2);
        return;
    }
    /*
     * The filter's callback here is an anonymous function because
     * using a named function in this case is not possible.
     *
     * The function cannot be unhooked, however, users are still able
     * to dequeue the stylesheets registered/enqueued by the callback
     * which is why in this case, using an anonymous function
     * was deemed acceptable.
     */
    add_filter($hook, $callback);
    // Enqueue assets in the editor.
    add_action('enqueue_block_assets', $callback);
}

WordPress Version: 6.1

/**
 * Enqueues a stylesheet for a specific block.
 *
 * If the theme has opted-in to separate-styles loading,
 * then the stylesheet will be enqueued on-render,
 * otherwise when the block inits.
 *
 * @since 5.9.0
 *
 * @param string $block_name The block-name, including namespace.
 * @param array  $args       An array of arguments [handle,src,deps,ver,media].
 */
function wp_enqueue_block_style($block_name, $args)
{
    $args = wp_parse_args($args, array('handle' => '', 'src' => '', 'deps' => array(), 'ver' => false, 'media' => 'all'));
    /**
     * Callback function to register and enqueue styles.
     *
     * @param string $content When the callback is used for the render_block filter,
     *                        the content needs to be returned so the function parameter
     *                        is to ensure the content exists.
     * @return string Block content.
     */
    $callback = static function ($content) use ($args) {
        // Register the stylesheet.
        if (!empty($args['src'])) {
            wp_register_style($args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media']);
        }
        // Add `path` data if provided.
        if (isset($args['path'])) {
            wp_style_add_data($args['handle'], 'path', $args['path']);
            // Get the RTL file path.
            $rtl_file_path = str_replace('.css', '-rtl.css', $args['path']);
            // Add RTL stylesheet.
            if (file_exists($rtl_file_path)) {
                wp_style_add_data($args['handle'], 'rtl', 'replace');
                if (is_rtl()) {
                    wp_style_add_data($args['handle'], 'path', $rtl_file_path);
                }
            }
        }
        // Enqueue the stylesheet.
        wp_enqueue_style($args['handle']);
        return $content;
    };
    $hook = did_action('wp_enqueue_scripts') ? 'wp_footer' : 'wp_enqueue_scripts';
    if (wp_should_load_separate_core_block_assets()) {
        /**
         * Callback function to register and enqueue styles.
         *
         * @param string $content The block content.
         * @param array  $block   The full block, including name and attributes.
         * @return string Block content.
         */
        $callback_separate = static function ($content, $block) use ($block_name, $callback) {
            if (!empty($block['blockName']) && $block_name === $block['blockName']) {
                return $callback($content);
            }
            return $content;
        };
        /*
         * The filter's callback here is an anonymous function because
         * using a named function in this case is not possible.
         *
         * The function cannot be unhooked, however, users are still able
         * to dequeue the stylesheets registered/enqueued by the callback
         * which is why in this case, using an anonymous function
         * was deemed acceptable.
         */
        add_filter('render_block', $callback_separate, 10, 2);
        return;
    }
    /*
     * The filter's callback here is an anonymous function because
     * using a named function in this case is not possible.
     *
     * The function cannot be unhooked, however, users are still able
     * to dequeue the stylesheets registered/enqueued by the callback
     * which is why in this case, using an anonymous function
     * was deemed acceptable.
     */
    add_filter($hook, $callback);
    // Enqueue assets in the editor.
    add_action('enqueue_block_assets', $callback);
}

WordPress Version: 5.9

/**
 * Enqueues a stylesheet for a specific block.
 *
 * If the theme has opted-in to separate-styles loading,
 * then the stylesheet will be enqueued on-render,
 * otherwise when the block inits.
 *
 * @since 5.9.0
 *
 * @param string $block_name The block-name, including namespace.
 * @param array  $args       An array of arguments [handle,src,deps,ver,media].
 * @return void
 */
function wp_enqueue_block_style($block_name, $args)
{
    $args = wp_parse_args($args, array('handle' => '', 'src' => '', 'deps' => array(), 'ver' => false, 'media' => 'all'));
    /**
     * Callback function to register and enqueue styles.
     *
     * @param string $content When the callback is used for the render_block filter,
     *                        the content needs to be returned so the function parameter
     *                        is to ensure the content exists.
     * @return string Block content.
     */
    $callback = static function ($content) use ($args) {
        // Register the stylesheet.
        if (!empty($args['src'])) {
            wp_register_style($args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media']);
        }
        // Add `path` data if provided.
        if (isset($args['path'])) {
            wp_style_add_data($args['handle'], 'path', $args['path']);
            // Get the RTL file path.
            $rtl_file_path = str_replace('.css', '-rtl.css', $args['path']);
            // Add RTL stylesheet.
            if (file_exists($rtl_file_path)) {
                wp_style_add_data($args['handle'], 'rtl', 'replace');
                if (is_rtl()) {
                    wp_style_add_data($args['handle'], 'path', $rtl_file_path);
                }
            }
        }
        // Enqueue the stylesheet.
        wp_enqueue_style($args['handle']);
        return $content;
    };
    $hook = did_action('wp_enqueue_scripts') ? 'wp_footer' : 'wp_enqueue_scripts';
    if (wp_should_load_separate_core_block_assets()) {
        /**
         * Callback function to register and enqueue styles.
         *
         * @param string $content The block content.
         * @param array  $block   The full block, including name and attributes.
         * @return string Block content.
         */
        $callback_separate = static function ($content, $block) use ($block_name, $callback) {
            if (!empty($block['blockName']) && $block_name === $block['blockName']) {
                return $callback($content);
            }
            return $content;
        };
        /*
         * The filter's callback here is an anonymous function because
         * using a named function in this case is not possible.
         *
         * The function cannot be unhooked, however, users are still able
         * to dequeue the stylesheets registered/enqueued by the callback
         * which is why in this case, using an anonymous function
         * was deemed acceptable.
         */
        add_filter('render_block', $callback_separate, 10, 2);
        return;
    }
    /*
     * The filter's callback here is an anonymous function because
     * using a named function in this case is not possible.
     *
     * The function cannot be unhooked, however, users are still able
     * to dequeue the stylesheets registered/enqueued by the callback
     * which is why in this case, using an anonymous function
     * was deemed acceptable.
     */
    add_filter($hook, $callback);
    // Enqueue assets in the editor.
    add_action('enqueue_block_assets', $callback);
}