diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/blocks/index.php --- a/wp/wp-includes/blocks/index.php Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-includes/blocks/index.php Fri Sep 05 18:40:08 2025 +0200 @@ -5,68 +5,140 @@ * @package WordPress */ +define( 'BLOCKS_PATH', ABSPATH . WPINC . '/blocks/' ); + // Include files required for core blocks registration. -require ABSPATH . WPINC . '/blocks/archives.php'; -require ABSPATH . WPINC . '/blocks/avatar.php'; -require ABSPATH . WPINC . '/blocks/block.php'; -require ABSPATH . WPINC . '/blocks/calendar.php'; -require ABSPATH . WPINC . '/blocks/categories.php'; -require ABSPATH . WPINC . '/blocks/comment-author-name.php'; -require ABSPATH . WPINC . '/blocks/comment-content.php'; -require ABSPATH . WPINC . '/blocks/comment-date.php'; -require ABSPATH . WPINC . '/blocks/comment-edit-link.php'; -require ABSPATH . WPINC . '/blocks/comment-reply-link.php'; -require ABSPATH . WPINC . '/blocks/comment-template.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-next.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-numbers.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-previous.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination.php'; -require ABSPATH . WPINC . '/blocks/comments-title.php'; -require ABSPATH . WPINC . '/blocks/cover.php'; -require ABSPATH . WPINC . '/blocks/file.php'; -require ABSPATH . WPINC . '/blocks/gallery.php'; -require ABSPATH . WPINC . '/blocks/home-link.php'; -require ABSPATH . WPINC . '/blocks/image.php'; -require ABSPATH . WPINC . '/blocks/latest-comments.php'; -require ABSPATH . WPINC . '/blocks/latest-posts.php'; -require ABSPATH . WPINC . '/blocks/legacy-widget.php'; -require ABSPATH . WPINC . '/blocks/loginout.php'; -require ABSPATH . WPINC . '/blocks/navigation-link.php'; -require ABSPATH . WPINC . '/blocks/navigation-submenu.php'; -require ABSPATH . WPINC . '/blocks/navigation.php'; -require ABSPATH . WPINC . '/blocks/page-list.php'; -require ABSPATH . WPINC . '/blocks/pattern.php'; -require ABSPATH . WPINC . '/blocks/post-author-biography.php'; -require ABSPATH . WPINC . '/blocks/post-author.php'; -require ABSPATH . WPINC . '/blocks/post-comments.php'; -require ABSPATH . WPINC . '/blocks/post-comments-form.php'; -require ABSPATH . WPINC . '/blocks/post-content.php'; -require ABSPATH . WPINC . '/blocks/post-date.php'; -require ABSPATH . WPINC . '/blocks/post-excerpt.php'; -require ABSPATH . WPINC . '/blocks/post-featured-image.php'; -require ABSPATH . WPINC . '/blocks/post-navigation-link.php'; -require ABSPATH . WPINC . '/blocks/post-template.php'; -require ABSPATH . WPINC . '/blocks/post-terms.php'; -require ABSPATH . WPINC . '/blocks/post-title.php'; -require ABSPATH . WPINC . '/blocks/query-no-results.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-next.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-numbers.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-previous.php'; -require ABSPATH . WPINC . '/blocks/query-pagination.php'; -require ABSPATH . WPINC . '/blocks/query-title.php'; -require ABSPATH . WPINC . '/blocks/query.php'; -require ABSPATH . WPINC . '/blocks/read-more.php'; -require ABSPATH . WPINC . '/blocks/rss.php'; -require ABSPATH . WPINC . '/blocks/search.php'; -require ABSPATH . WPINC . '/blocks/shortcode.php'; -require ABSPATH . WPINC . '/blocks/site-logo.php'; -require ABSPATH . WPINC . '/blocks/site-tagline.php'; -require ABSPATH . WPINC . '/blocks/site-title.php'; -require ABSPATH . WPINC . '/blocks/social-link.php'; -require ABSPATH . WPINC . '/blocks/tag-cloud.php'; -require ABSPATH . WPINC . '/blocks/template-part.php'; -require ABSPATH . WPINC . '/blocks/term-description.php'; -require ABSPATH . WPINC . '/blocks/widget-group.php'; +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 + * + * @global string $wp_version The WordPress version string. + */ +function register_core_block_style_handles() { + global $wp_version; + + if ( ! wp_should_load_separate_core_block_assets() ) { + return; + } + + $blocks_url = includes_url( 'blocks/' ); + $suffix = wp_scripts_get_suffix(); + $wp_styles = wp_styles(); + $style_fields = array( + 'style' => 'style', + 'editorStyle' => 'editor', + ); + + static $core_blocks_meta; + if ( ! $core_blocks_meta ) { + $core_blocks_meta = require BLOCKS_PATH . 'blocks-json.php'; + } + + $files = false; + $transient_name = 'wp_core_block_css_files'; + + /* + * Ignore transient cache when the development mode is set to 'core'. Why? To avoid interfering with + * the core developer's workflow. + */ + $can_use_cached = ! wp_is_development_mode( 'core' ); + + if ( $can_use_cached ) { + $cached_files = get_transient( $transient_name ); + + // Check the validity of cached values by checking against the current WordPress version. + if ( + is_array( $cached_files ) + && isset( $cached_files['version'] ) + && $cached_files['version'] === $wp_version + && isset( $cached_files['files'] ) + ) { + $files = $cached_files['files']; + } + } + + if ( ! $files ) { + $files = glob( wp_normalize_path( BLOCKS_PATH . '**/**.css' ) ); + + // Normalize BLOCKS_PATH prior to substitution for Windows environments. + $normalized_blocks_path = wp_normalize_path( BLOCKS_PATH ); + + $files = array_map( + static function ( $file ) use ( $normalized_blocks_path ) { + return str_replace( $normalized_blocks_path, '', $file ); + }, + $files + ); + + // Save core block style paths in cache when not in development mode. + if ( $can_use_cached ) { + set_transient( + $transient_name, + array( + 'version' => $wp_version, + 'files' => $files, + ) + ); + } + } + + $register_style = static function ( $name, $filename, $style_handle ) use ( $blocks_url, $suffix, $wp_styles, $files ) { + $style_path = "{$name}/{$filename}{$suffix}.css"; + $path = wp_normalize_path( BLOCKS_PATH . $style_path ); + + if ( ! in_array( $style_path, $files, true ) ) { + $wp_styles->add( + $style_handle, + false + ); + return; + } + + $wp_styles->add( $style_handle, $blocks_url . $style_path ); + $wp_styles->add_data( $style_handle, 'path', $path ); + + $rtl_file = "{$name}/{$filename}-rtl{$suffix}.css"; + 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', str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $path ) ); + } + }; + + 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"; + } + + // Register block theme styles. + $register_style( $name, 'theme', "wp-block-{$name}-theme" ); + + foreach ( $style_fields as $style_field => $filename ) { + $style_handle = $schema[ $style_field ]; + if ( is_array( $style_handle ) ) { + continue; + } + $register_style( $name, $filename, $style_handle ); + } + } +} +add_action( 'init', 'register_core_block_style_handles', 9 ); /** * Registers core block types using metadata files. @@ -75,40 +147,10 @@ * @since 5.5.0 */ function register_core_block_types_from_metadata() { - $block_folders = array( - 'audio', - 'button', - 'buttons', - 'code', - 'column', - 'columns', - 'comments-query-loop', - 'embed', - 'freeform', - 'group', - 'heading', - 'html', - 'list', - 'media-text', - 'missing', - 'more', - 'nextpage', - 'paragraph', - 'preformatted', - 'pullquote', - 'quote', - 'separator', - 'social-links', - 'spacer', - 'table', - 'text-columns', - 'verse', - 'video', - ); - + $block_folders = require BLOCKS_PATH . 'require-static-blocks.php'; foreach ( $block_folders as $block_folder ) { - register_block_type( - ABSPATH . WPINC . '/blocks/' . $block_folder + register_block_type_from_metadata( + BLOCKS_PATH . $block_folder ); } }