mirror of
https://github.com/WordPress/WordPress.git
synced 2024-11-19 09:05:22 +01:00
6adb9be81f
Register all core blocks in a new function called `register_core_block_style_handles`. This mirrors the function `wp_default_styles` where all core styles are registered in one place. This improves block registration performance, as it avoids expensive file lookups, like realpath in `register_block_style_handle`. The new function `register_core_block_style_handles` uses `glob` to get all css files in the blocks directory. This glob is cached in a transient to save lookups on subsequent requests. The function `register_block_style_handle` now checks to see if the style handle is already registered before trying to register it again. Props mukesh27, westonruter, flixos90, joemcgill, spacedmonkey. Fixes #58528. Built from https://develop.svn.wordpress.org/trunk@56044 git-svn-id: http://core.svn.wordpress.org/trunk@55556 1a063a9b-81f0-0310-95a4-ce76da25c4cd
116 lines
3.3 KiB
PHP
116 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* Used to set up all core blocks used with the block editor.
|
|
*
|
|
* @package WordPress
|
|
*/
|
|
|
|
define( 'BLOCKS_PATH', ABSPATH . WPINC . '/blocks/' );
|
|
|
|
// Include files required for core blocks registration.
|
|
require BLOCKS_PATH . 'legacy-widget.php';
|
|
require BLOCKS_PATH . 'widget-group.php';
|
|
require BLOCKS_PATH . 'require-dynamic-blocks.php';
|
|
|
|
/**
|
|
* Registers core block style handles.
|
|
*
|
|
* While {@see register_block_style_handle()} is typically used for that, the way it is
|
|
* implemented is inefficient for core block styles. Registering those style handles here
|
|
* avoids unnecessary logic and filesystem lookups in the other function.
|
|
*
|
|
* @since 6.3.0
|
|
*/
|
|
function register_core_block_style_handles() {
|
|
if ( ! wp_should_load_separate_core_block_assets() ) {
|
|
return;
|
|
}
|
|
|
|
static $core_blocks_meta;
|
|
if ( ! $core_blocks_meta ) {
|
|
$core_blocks_meta = require ABSPATH . WPINC . '/blocks/blocks-json.php';
|
|
}
|
|
|
|
$includes_url = includes_url();
|
|
$includes_path = ABSPATH . WPINC . '/';
|
|
$suffix = wp_scripts_get_suffix();
|
|
$wp_styles = wp_styles();
|
|
$style_fields = array(
|
|
'style' => 'style',
|
|
'editorStyle' => 'editor',
|
|
);
|
|
|
|
/*
|
|
* Ignore transient cache when the development mode is set to 'core'. Why? To avoid interfering with
|
|
* the core developer's workflow.
|
|
*/
|
|
if ( 'core' !== wp_get_development_mode() ) {
|
|
$transient_name = 'wp_core_block_css_files';
|
|
$files = get_transient( $transient_name );
|
|
if ( ! $files ) {
|
|
$files = glob( __DIR__ . '/**/**.css' );
|
|
set_transient( $transient_name, $files );
|
|
}
|
|
} else {
|
|
$files = glob( __DIR__ . '/**/**.css' );
|
|
}
|
|
|
|
foreach ( $core_blocks_meta as $name => $schema ) {
|
|
/** This filter is documented in wp-includes/blocks.php */
|
|
$schema = apply_filters( 'block_type_metadata', $schema );
|
|
|
|
// Backfill these properties similar to `register_block_type_from_metadata()`.
|
|
if ( ! isset( $schema['style'] ) ) {
|
|
$schema['style'] = "wp-block-{$name}";
|
|
}
|
|
if ( ! isset( $schema['editorStyle'] ) ) {
|
|
$schema['editorStyle'] = "wp-block-{$name}-editor";
|
|
}
|
|
|
|
foreach ( $style_fields as $style_field => $filename ) {
|
|
$style_handle = $schema[ $style_field ];
|
|
if ( is_array( $style_handle ) ) {
|
|
continue;
|
|
}
|
|
|
|
$style_path = "blocks/{$name}/{$filename}{$suffix}.css";
|
|
$path = $includes_path . $style_path;
|
|
|
|
if ( ! in_array( $path, $files, true ) ) {
|
|
$wp_styles->add(
|
|
$style_handle,
|
|
false
|
|
);
|
|
continue;
|
|
}
|
|
|
|
$wp_styles->add( $style_handle, $includes_url . $style_path );
|
|
$wp_styles->add_data( $style_handle, 'path', $path );
|
|
|
|
$rtl_file = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $path );
|
|
if ( is_rtl() && in_array( $rtl_file, $files, true ) ) {
|
|
$wp_styles->add_data( $style_handle, 'rtl', 'replace' );
|
|
$wp_styles->add_data( $style_handle, 'suffix', $suffix );
|
|
$wp_styles->add_data( $style_handle, 'path', $rtl_file );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
add_action( 'init', 'register_core_block_style_handles', 9 );
|
|
|
|
/**
|
|
* Registers core block types using metadata files.
|
|
* Dynamic core blocks are registered separately.
|
|
*
|
|
* @since 5.5.0
|
|
*/
|
|
function register_core_block_types_from_metadata() {
|
|
$block_folders = require BLOCKS_PATH . 'require-static-blocks.php';
|
|
foreach ( $block_folders as $block_folder ) {
|
|
register_block_type_from_metadata(
|
|
BLOCKS_PATH . $block_folder
|
|
);
|
|
}
|
|
}
|
|
add_action( 'init', 'register_core_block_types_from_metadata' );
|