wp_restore_group_inner_container

The timeline below displays how wordpress function wp_restore_group_inner_container has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

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;
}

WordPress Version: 6.2

/**
 * 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;
    }
    $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];
    }, $block_content);
    return $updated_content;
}

WordPress Version: 6.1

/**
 * 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_JSON_Resolver::theme_has_support() || 1 === preg_match($group_with_inner_container_regex, $block_content) || isset($block['attrs']['layout']['type']) && 'flex' === $block['attrs']['layout']['type']) {
        return $block_content;
    }
    $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];
    }, $block_content);
    return $updated_content;
}

WordPress Version: 5.9

/**
 * 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 ('core/group' !== $block['blockName'] || WP_Theme_JSON_Resolver::theme_has_support() || 1 === preg_match($group_with_inner_container_regex, $block_content) || isset($block['attrs']['layout']['type']) && 'default' !== $block['attrs']['layout']['type']) {
        return $block_content;
    }
    $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];
    }, $block_content);
    return $updated_content;
}

WordPress Version: 5.8

/**
 * 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)
{
    $group_with_inner_container_regex = '/(^\s*<div\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/';
    if ('core/group' !== $block['blockName'] || WP_Theme_JSON_Resolver::theme_has_support() || 1 === preg_match($group_with_inner_container_regex, $block_content)) {
        return $block_content;
    }
    $replace_regex = '/(^\s*<div\b[^>]*wp-block-group[^>]*>)(.*)(<\/div>\s*$)/ms';
    $updated_content = preg_replace_callback($replace_regex, function ($matches) {
        return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
    }, $block_content);
    return $updated_content;
}