Skip to content

Commit 9cc64f5

Browse files
westonruteradamsilverstein
authored andcommitted
Sync changes from wp_enqueue_global_styles() to Gutenberg override (#76127)
* Sync changes from wp_enqueue_global_styles() to gutenberg override * Sync latest changes from WordPress/wordpress-develop#10875 Co-authored-by: westonruter <[email protected]> Co-authored-by: adamsilverstein <[email protected]>
1 parent 3a23862 commit 9cc64f5

1 file changed

Lines changed: 30 additions & 8 deletions

File tree

lib/script-loader.php

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,46 @@
1717
* @return void
1818
*/
1919
function gutenberg_enqueue_global_styles() {
20-
$separate_assets = wp_should_load_separate_core_block_assets();
20+
$assets_on_demand = wp_should_load_block_assets_on_demand();
2121
$is_block_theme = wp_is_block_theme();
2222
$is_classic_theme = ! $is_block_theme;
2323

24-
/*
25-
* Global styles should be printed in the head when loading all styles combined.
26-
* The footer should only be used to print global styles for classic themes with separate core assets enabled.
24+
/**
25+
* Global styles should be printed in the HEAD for block themes, or for classic themes when loading assets on
26+
* demand is disabled (which is no longer the default since WordPress 6.9).
2727
*
28-
* See https://core.trac.wordpress.org/ticket/53494.
28+
* @link https://core.trac.wordpress.org/ticket/53494
29+
* @link https://core.trac.wordpress.org/ticket/61965
2930
*/
3031
if (
31-
( $is_block_theme && doing_action( 'wp_footer' ) ) ||
32-
( $is_classic_theme && doing_action( 'wp_footer' ) && ! $separate_assets ) ||
33-
( $is_classic_theme && doing_action( 'wp_enqueue_scripts' ) && $separate_assets )
32+
doing_action( 'wp_footer' ) &&
33+
(
34+
$is_block_theme ||
35+
( $is_classic_theme && ! $assets_on_demand )
36+
)
3437
) {
3538
return;
3639
}
3740

41+
/**
42+
* The footer should only be used for classic themes when loading assets on demand is enabled. In WP 6.9 this is the
43+
* default with the introduction of hoisting late-printed styles (via {@see wp_load_classic_theme_block_styles_on_demand()}).
44+
* So even though the main global styles are not printed here in the HEAD for classic themes with on-demand asset
45+
* loading, a placeholder for the global styles is still enqueued. Then when {@see wp_hoist_late_printed_styles()}
46+
* processes the output buffer, it can locate the placeholder and inject the global styles from the footer into the
47+
* HEAD, replacing the placeholder.
48+
*
49+
* @link https://core.trac.wordpress.org/ticket/64099
50+
*/
51+
if ( $is_classic_theme && doing_action( 'wp_enqueue_scripts' ) && $assets_on_demand ) {
52+
if ( has_action( 'wp_template_enhancement_output_buffer_started', 'wp_hoist_late_printed_styles' ) ) {
53+
wp_register_style( 'wp-global-styles-placeholder', false );
54+
wp_add_inline_style( 'wp-global-styles-placeholder', ':root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }' );
55+
wp_enqueue_style( 'wp-global-styles-placeholder' );
56+
}
57+
return;
58+
}
59+
3860
/*
3961
* If loading the CSS for each block separately, then load the theme.json CSS conditionally.
4062
* This removes the CSS from the global-styles stylesheet and adds it to the inline CSS for each block.

0 commit comments

Comments
 (0)