Как оборачивать каждый элемент в div WP?

Ссылка скопирована
0 ответов

Есть такая функция с регуляркой, которая оборачивает все блоки на фронте в div

public static function wrap_content_in_div($content)     {         if (is_single() && is_singular('post')) {             // Определение регулярного выражения для обнаружения тегов, которые нужно обернуть              $pattern = '/<(b(?:h[1-6]|p|ul|ol)b)([^>]*)>([sS]*?)</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);

public static function wrap_content_in_div($content) { if (is_single() && is_singular('post')) { // Определение регулярного выражения для обнаружения тегов, которые нужно обернуть $pattern = '/<(b(?:h[1-6]|p|ul|ol)b)([^>]*)>([sS]*?)</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

Дополнительно:

Выкинь это вообще. Это только создаёт нагрузку.

Ответы:

Посмотрите в коде где у вас функция создания шорткода и ее приоритет, после этого просто укажите приоритет обертке раньше (ближе к 1). Скорее всего приоритет шорткода стоит 10.
PS На вашем месте я бы лучше шаблон переписал , делать регулярку чтоб он оборачивал все в div сомнительное занятие

  • А почему с регулярками не стоит связываться?
  • Артем Колчин, представь какую нагрузку ты даешь на сервер чтоб он на всех страницах удовлетворяющих условию if (is_single() && is_singular('post')) искал по твоей регулярке совпадение и дальше добавлял в html обертку . Во время разработки явно что-то пошло не так ))
    PS Возможно сейчас этот сайт посещают не много людей и ты не видишь тормозов, цп справляется, веселье начнется от 1000 человек (все зависит от конфигурации сервера)
  • Артем Колчин, регулярки применять можно, но не так как сейчас
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно