diff --git a/src/wp-includes/block-supports/elements.php b/src/wp-includes/block-supports/elements.php
index ceb8841ac15cd..4f095912272ca 100644
--- a/src/wp-includes/block-supports/elements.php
+++ b/src/wp-includes/block-supports/elements.php
@@ -46,7 +46,7 @@ function wp_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.
@@ -68,17 +68,7 @@ function wp_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',
- static function () use ( $style ) {
- echo $style;
- }
- );
+ wp_enqueue_block_support( $style );
return $content;
}
diff --git a/src/wp-includes/block-supports/layout.php b/src/wp-includes/block-supports/layout.php
index 529a775a92ac4..e225a637ce0ae 100644
--- a/src/wp-includes/block-supports/layout.php
+++ b/src/wp-includes/block-supports/layout.php
@@ -175,17 +175,7 @@ function wp_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',
- static function () use ( $style ) {
- echo '';
- }
- );
+ wp_enqueue_block_support( $style );
return $content;
}
diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php
index cec2f36925227..ae1fc9bffe7f2 100644
--- a/src/wp-includes/blocks.php
+++ b/src/wp-includes/blocks.php
@@ -1332,3 +1332,29 @@ function _wp_multiple_block_styles( $metadata ) {
return $metadata;
}
add_filter( 'block_type_metadata', '_wp_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 wp_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";
+ }
+ );
+}