diff --git a/lib/block-supports/elements.php b/lib/block-supports/elements.php index f3b7891f107d6..711631a63b661 100644 --- a/lib/block-supports/elements.php +++ b/lib/block-supports/elements.php @@ -43,7 +43,7 @@ function gutenberg_render_elements_support( $block_content, $block ) { } $link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) ); - $style = "\n"; + $style = ".$class_name a{" . $link_color_declaration . ';}'; // Like the layout hook this assumes the hook only applies to blocks with a single wrapper. // Retrieve the opening tag of the first HTML element. @@ -65,15 +65,7 @@ function gutenberg_render_elements_support( $block_content, $block ) { $content = substr_replace( $block_content, ' class="' . $class_name . '"', $first_element_offset + strlen( $first_element ) - 1, 0 ); } - // Ideally styles should be loaded in the head, but blocks may be parsed - // after that, so loading in the footer for now. - // See https://core.trac.wordpress.org/ticket/53494. - add_action( - 'wp_footer', - function () use ( $style ) { - echo $style; - } - ); + gutenberg_enqueue_block_support( $style ); return $content; } diff --git a/lib/block-supports/layout.php b/lib/block-supports/layout.php index e96b582298936..867df818c5828 100644 --- a/lib/block-supports/layout.php +++ b/lib/block-supports/layout.php @@ -166,15 +166,7 @@ function gutenberg_render_layout_support_flag( $block_content, $block ) { 1 ); - // Ideally styles should be loaded in the head, but blocks may be parsed - // after that, so loading in the footer for now. - // See https://core.trac.wordpress.org/ticket/53494. - add_action( - 'wp_footer', - function () use ( $style ) { - echo ''; - } - ); + gutenberg_enqueue_block_support( $style ); return $content; } diff --git a/lib/blocks.php b/lib/blocks.php index 8a61b1ff8a4a4..a9289f1cd9616 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -590,3 +590,29 @@ function gutenberg_multiple_block_styles( $metadata ) { return $metadata; } add_filter( 'block_type_metadata', 'gutenberg_multiple_block_styles' ); + +/** + * This function takes care of adding inline styles + * in the proper place, depending on the theme in use. + * + * For block themes, it's loaded in the head. + * For classic ones, it's loaded in the body + * because the wp_head action (and wp_enqueue_scripts) + * happens before the render_block. + * + * See https://core.trac.wordpress.org/ticket/53494. + * + * @param string $style String containing the CSS styles to be added. + */ +function gutenberg_enqueue_block_support( $style ) { + $action_hook_name = 'wp_footer'; + if ( wp_is_block_theme() ) { + $action_hook_name = 'wp_enqueue_scripts'; + } + add_action( + $action_hook_name, + function () use ( $style ) { + echo "\n"; + } + ); +}