Удалить wpautop из содержимого шорткода / удалить пробелы в буферизации
Я использую плагин Mailchimp, и у него есть шорткод, который использует буферизацию вывода, чтобы захватить код своего виджета и выплюнуть его в содержимое.
Однако в коде виджета много пробелов, поэтому фильтры the_content повсюду выбрасывают бесполезные прерывания строк (например, после скрытых вводов) и пустые теги p
... делая его непригодным для использования. Я удаляю шорткод, чтобы добавить свой собственный, но я не уверен, что нужно сделать, чтобы предотвратить фильтр WordPress wpautop от того, чтобы сойти с ума. Моей первой мыслью было убрать пробелы между HTML-тегами, но я не знаю, как это сделать.
В идеале плагин объединял бы возвращаемую строку вместо использования буферизации вывода, но я не знаю, будут ли они когда-нибудь беспокоиться.
3 answers
Для этого вам не нужен плагин. Просто добавьте 3 строки кода в конец файла functions.php
в вашей активной теме:
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99 );
add_filter( 'the_content', 'shortcode_unautop', 100 );
Ответ Ши является хорошим решением, но он отключает автозапуск для всех коротких кодов, которые могут быть нежелательными.
Я написал скрипт, который позволяет запускать следующее:
include "shortcode-wpautop-control.php";
chiedolabs_shortcode_wpautop_control(array('yourshortcode'));
Это позволяет отключить wpautop для определенных коротких кодов вместо всех.
Еще раз, я написал сценарий. Я не собираюсь заниматься саморекламой, но по мере того, как я буду обновлять его в будущем, я буду обновлять его на GitHub, поэтому нет смысла публиковать код здесь.
Вы можете увидеть сценарий на Шорткод wp-автоматическое управление.
Доступна функция WordPress, которая отлично справляется с этой работой. Для этого нет необходимости использовать пользовательскую функцию или плагин.
Просто используйте функцию shortcode_unautop($pee)
, чтобы удалить wpautop из содержимого шорткода. Здесь $pee
- требуемая строка.