Skip to content

Commit

Permalink
Load block support styles in the head for block themes (#38750)
Browse files Browse the repository at this point in the history
  • Loading branch information
oandregal authored Feb 16, 2022
1 parent d29eec8 commit 1832b77
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 19 deletions.
12 changes: 2 additions & 10 deletions lib/block-supports/elements.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function gutenberg_render_elements_support( $block_content, $block ) {
}
$link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) );

$style = "<style>.$class_name a{" . $link_color_declaration . ";}</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.
Expand All @@ -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;
}
Expand Down
10 changes: 1 addition & 9 deletions lib/block-supports/layout.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 '<style>' . $style . '</style>';
}
);
gutenberg_enqueue_block_support( $style );

return $content;
}
Expand Down
26 changes: 26 additions & 0 deletions lib/blocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 "<style>$style</style>\n";
}
);
}

0 comments on commit 1832b77

Please sign in to comment.