Есть такая функция с регуляркой, которая оборачивает все блоки на фронте в div
public static function wrap_content_in_div($content)
{
if (is_single() && is_singular('post')) {
// Определение регулярного выражения для обнаружения тегов, которые нужно обернуть
$pattern = '/<(\b(?:h[1-6]|p|ul|ol)\b)([^>]*)>([\s\S]*?)<\/\1>/i';
// Замена совпадений с использованием preg_replace_callback
$content_with_wraps = preg_replace_callback($pattern, function ($matches) {
$tag = $matches[1];
$attributes = $matches[2];
$inner_content = $matches[3];
// Определение класса для обертки в зависимости от тега
$wrapper_class = ($tag === 'p') ? 'wrap__padding' : (($tag === 'img') ? 'wrap__img' : 'wrap__full');
// Формирование обертки и возвращение результата
return "<div class='article__text $wrapper_class article__text_column article__holder'>$matches[0]</div>";
}, $content);
return $content_with_wraps;
} else {
return $content;
}
}
add_filter('the_content', [__CLASS__, 'wrap_content_in_div'], 100);
Но проблема в том что есть шорткоды которые тоже используются со своей версткой и нужно чтоб обертка срабатывала только для корневых элементов.
Точнее не совсем понимаю приоритет обработки шорткодов и и моей функции.
Моей функции я задал приоритет 100, она всё оборачивает как нужно. Но вот если вмешивается шорткод, то обертка начинается и внутри, хотелось бы чтоб только корневые блоки оборачивал в div