Блог Андрія Огороднікова Хто з мечем до нас прийде, від меча й загине.

Нейтрализация форматирования от WordPress

14.04.2017, 03:15

Как всем известно, WordPress — движок очень своевольный и действует часто против своего «администратора». Кто кем управляет большой вопрос… Ну так вот. Одной из самых противных фич wp является оборачивание всего без разбора в тег <р> — в параграф. Я уж не говорю, что форматирование форматируется даже в текстовом режиме редактора «html» как захочется движку, а не автору. Часто бывало — пыжишься десятки минут, лепишь шедевр, сохраняешь, а wp вынимает из верстки статьи кондовое бревно и весь сруб рассыпается.

За годы пользования я с таким поведением движка смирился и особо не изгаляюсь, хочешь строй, а хочешь куй, все равно получишь орден. Да-с. Ну а вчера, подменяя удаленное ютубом видео с Хью Лори (интереснейший фильм о его втором альбоме и путешествии по поводу), узрел, как много костылей я наставил в стилях css, дабы хулиганство вордпресса забороть. И эти костыли, естественно, вылезли мне боком (например, посносило вправо все внешние встраивания, стоило только тронуть..)

2 тезиса:
1) нужна тотальная ревизия и переделка темы (читай — стилей). В прошлый раз ничего толком не…
2) диктатуру вордпресса нужно хотя бы немного пресекать (вот поэтому еще я наслаждаюсь самописным бложеком. Если налажал — некого винить)).

Итак, способ по второму пункту естественно пролегает через functions.php. Я понятия не имею, кто же изначальный его автор, блойеры друг у друга копипастят (ну вот и я приобщился), посему без ссылки и как есть.

function my_formatter($content) {
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
 
foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}
 
return $new_content;
}
 
remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');
 
add_filter('the_content', 'my_formatter', 99);

Вот эту красоту нужно вставить, аккуратно. Иногда, в зависимости от темы, необходимо применить теги php, то есть, зажать этот код в:

<?php  ...  ?>

После этого в редакторе вордпресса достаточно написать [raw] [/raw] и творить внутри этих тегов, что взбредет. WordPress реагировать не будет. Он будто бы уснет.

p.s. Полностью, жестко отключать это форматирование смысла не имеет, во-первых, все записи, созданные до этого момента кардинально изменят свой вид, есть мнение, что в худшую сторону, ибо никакого форматирования не будет вообще. Воржпресс же так действует, как некоторые индивилдлы используют акселератор в машине — вкл/выкл. Во-вторых, при текстовой работе, удобно, когда абзацы автоматически формируются. Разрабам бы более адаптивную систему сделать: параграф это параграф, картинка это картинка, айфрейм это айфрейм, итд итп. Просто, изначально, все рассчитано на неофитов, которые двух слов связать не могут, но ставят бложек и тыкают в батоны. Чтоб было кавайненько и единообразно, им оборачивают все приблуды в параграфы, внедряют неотключаемые смайлы emoji и не дают ни во что вляпаться —

За те 8 практически лет, что я им пользуюсь, вордпресс утратил множество тонких настроек, при этом стал потреблять огромное количество ресурсов, обзаведясь фичами, порой совершенно излишними, которые можно было бы подключать по выбору, модульно или плагинами на худой конец. (Очень походит на Firefox, это такая модель для успешных опенсорсных проектов? Я тебя породил, я тебя и раскормлю)).

Поэтому приходится хакать все, что можно хакать, functions.php растет как на дрожжах.