WordPress по умолчанию автоматически оборачивает текстовые блоки в теги <p>, а переносы строк заменяет на <br>. Это удобная функция для большинства пользователей, позволяющая форматировать контент без специальных знаний HTML. Однако в некоторых случаях это поведение мешает, например, когда вы пишете сложные кастомные шаблоны, добавляете собственные HTML-блоки или работаете с шорткодами, где лишние <p> и <br> ломают верстку.
Почему WordPress добавляет теги <p> автоматически
Функция wpautop отвечает за автоматическое добавление тегов абзацев. Она применяется к содержимому постов и страниц через фильтр the_content. Это упрощает создание контента для пользователей без знаний HTML — достаточно просто писать текст с переносами строк, и WordPress сам расставит теги.
Но при работе с кастомным выводом, шорткодами или редакторами блоков иногда нужно отключить это поведение, чтобы сохранить точную структуру HTML.
Как отключить автоматическое добавление <p> для всего контента
Если вы хотите полностью отключить автоматическое добавление <p> для всего содержимого, можно удалить фильтр wpautop из the_content в файле functions.php вашей темы или в плагине. Это очень просто:
remove_filter('the_content', 'wpautop');
Но будьте осторожны: такой подход отключит автоматические абзацы для всего контента, и в редакторе придется вручную вставлять теги <p> и <br>, иначе текст будет выводиться без разметки.
Отключение wpautop только для шорткодов
Часто возникает задача — отключить автоматическое добавление <p> только внутри конкретного шорткода, чтобы не ломать верстку. Для этого можно обернуть вывод шорткода в функцию, которая удаляет и затем восстанавливает фильтр wpautop.
Пример кода для шорткода [2wp_custom]:
function 2wp_remove_wpautop_for_shortcode( $atts, $content = null ) {
remove_filter('the_content', 'wpautop');
$output = do_shortcode( $content );
add_filter('the_content', 'wpautop');
return $output;
}
add_shortcode( '2wp_custom', '2wp_remove_wpautop_for_shortcode' );
Так вы отключите автоматические абзацы только внутри этого шорткода и сохраните оригинальный контент для остального сайта.
Использование фильтра wpautop для точечной настройки
Если нужна более гибкая настройка, можно использовать фильтр wpautop напрямую. Например, вы можете изменить поведение функции, чтобы она не обрабатывала определённые блоки или строки.
Вот пример, как убрать автоматические <p> только для контента, который содержит специальный маркер [noautop]:
function 2wp_conditional_wpautop( $content ) {
if ( strpos( $content, '[noautop]' ) !== false ) {
// Убираем маркер из вывода
$content = str_replace('[noautop]', '', $content);
return $content; // возвращаем без wpautop
}
return wpautop( $content );
}
remove_filter('the_content', 'wpautop');
add_filter('the_content', '2wp_conditional_wpautop');
Это позволит вам контролировать, когда применять автоматические абзацы, а когда — нет, прямо в контенте.
Примеры плагинов для управления <p> в WordPress
Если не хочется писать код, можно использовать готовые плагины:
- Disable wpautop — простой плагин, отключающий автоматические теги <p> и <br>.
- TinyMCE Advanced — расширяет визуальный редактор и позволяет точнее управлять HTML-разметкой.
- Clearfy Pro — многофункциональный плагин для оптимизации WordPress, в том числе с возможностью отключения wpautop в некоторых случаях.
Заключение по управлению тегами <p> в WordPress
Автоматическое добавление тегов <p> — полезная, но не всегда желательная функция. Важно понимать, как и когда её отключать, чтобы не потерять форматирование. Используйте remove_filter('the_content', 'wpautop') для глобального отключения, либо точечное удаление внутри шорткодов или через фильтр для более гибкой настройки.
Также полезно тестировать вывод в разных редакторах и браузерах, чтобы избежать проблем с версткой и сохранить удобство редактирования.