WordPress Version: 6.5
/**
* For themes without theme.json file, make sure
* to restore the inner div for the group block
* to avoid breaking styles relying on that div.
*
* @since 5.8.0
* @access private
*
* @param string $block_content Rendered block content.
* @param array $block Block object.
* @return string Filtered block content.
*/
function wp_restore_group_inner_container($block_content, $block)
{
$tag_name = isset($block['attrs']['tagName']) ? $block['attrs']['tagName'] : 'div';
$group_with_inner_container_regex = sprintf('/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U', preg_quote($tag_name, '/'));
if (wp_theme_has_theme_json() || 1 === preg_match($group_with_inner_container_regex, $block_content) || isset($block['attrs']['layout']['type']) && 'flex' === $block['attrs']['layout']['type']) {
return $block_content;
}
/*
* This filter runs after the layout classnames have been added to the block, so they
* have to be removed from the outer wrapper and then added to the inner.
*/
$layout_classes = array();
$processor = new WP_HTML_Tag_Processor($block_content);
if ($processor->next_tag(array('class_name' => 'wp-block-group'))) {
foreach ($processor->class_list() as $class_name) {
if (str_contains($class_name, 'is-layout-')) {
$layout_classes[] = $class_name;
$processor->remove_class($class_name);
}
}
}
$content_without_layout_classes = $processor->get_updated_html();
$replace_regex = sprintf('/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms', preg_quote($tag_name, '/'));
$updated_content = preg_replace_callback($replace_regex, static function ($matches) {
return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
}, $content_without_layout_classes);
// Add layout classes to inner wrapper.
if (!empty($layout_classes)) {
$processor = new WP_HTML_Tag_Processor($updated_content);
if ($processor->next_tag(array('class_name' => 'wp-block-group__inner-container'))) {
foreach ($layout_classes as $class_name) {
$processor->add_class($class_name);
}
}
$updated_content = $processor->get_updated_html();
}
return $updated_content;
}