Gloynus_Aleos
@Gloynus_Aleos
Эльф

WordPress. Как автоматически оборачивать блоки перед выводом на страницу?

Сайт на WordPress.
В статьях часто выстраиваются многоуровневые списки. Каждый подуровень необходимо сворачивать в спойлер.
Есть решение через JQ:
jQuery('li>ol').wrap('<div class="spoil"><div class="sp_text"></div></div>'); // обернуть
jQuery( '.spoil' ).prepend('<button class="sp_button">Подробности</button>'); // добавить кнопку

Главный минус этого решения в том, что он искажает нумерацию, так как меняет код уже после его вывода.
Вопросы:
1) Будет ли лучше оставить решение через JQ и придумать, как восстанавливать нумерацию или же лучше найти решение через PHP?
2) Как восстанавливать нумерацию? Переводом родительского блока на другой класс, в котором тоже описаны нужные для нумерации стили? Или есть более грамотное решение?
3) Как всё-таки в WordPress перед выводом готового HTML-кода на страницу найти в нём нужные блоки и обернуть их?
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
Gloynus_Aleos
@Gloynus_Aleos Автор вопроса
Эльф
Решение найдено. Если кому интересно, то делается это примерно так.
add_filter('the_content', 'spoilers');
function spoilers( $text ){
	$text = preg_replace('/(<\/ol>)(((?!<li.*>|<\/li>|<ol.*>|<\/ol>).)*?)(<\/li>)/s', '$1$2</div></div>$2$4', $text);
	$text = preg_replace('/(<li>((?!<li.*>|<\/li>|<ol.*>|<\/ol>).)*?)(<ol>)/s', '$1<div class="spoil"><button class="sp_button>Подробности</button><div class="sp_text">$2$3', $text);
	return $text;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Gori4ka
@Gori4ka
WordPress Developer
Можно подцепится на фильтр the_content и дальше через регулярное выражениеоборачивать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы