Many visual editors automatically frame the non-block elements in the tag P, if shortcode will display any block tag, you get
text
and most likely will go layout
Многие визуальные редакторы автоматически обрамляют неблочные элементы в тег
, если шорткод будет выводить какой-нибудь блочный тег, то получится
текст
и скорей всего верстка поедет, внутри тега P не должно быть блочных элементов.
Варианты решения:
1) Настроить редактор так, чтобы он ставил вместо
- костыль
2) В настройках редактора указать, что {shortcode} - это блочный элемент. Было бы возможно, если бы шорткоды имели вид html-тега: - так сделано в diafan CMS.
3) Поправить регулярные выражения так, чтобы тег P вокруг шорткода пропускался. Не силен в регулярках, но идея надеюсь понятна.
Здесь изменить строчку на что-то такое:
$pattern = "/(\<p\>)?(.?)\{([$shortcodes]+)(.*?)(\/)?\}(?(4)|(?:(.+?)\{\/\s*\\2\s*\}))?(.?)(\<\/p\>)?/s";
В GetSimple эта проблема решается 3 способом, только не очень изящное решение у них:
Можно еще посмотреть как WordPress обрабатывает шорткоды.
Это всё надо настраивать в самих виз. редакторах, но никак не в коде самой cms. Встроенный редактор markItUp такими проблемами не обладает (ну его и виз. редактором не назвать).
Google translate
Many visual editors automatically frame the non-block elements in the tag P, if shortcode will display any block tag, you get
Многие визуальные редакторы автоматически обрамляют неблочные элементы в тег
, если шорткод будет выводить какой-нибудь блочный тег, то получитсяВарианты решения:
1) Настроить редактор так, чтобы он ставил
- костыль 2) В настройках редактора указать, что {shortcode} - это блочный элемент. Было бы возможно, если бы шорткоды имели вид html-тега:вместо
$pattern = "/(\<p\>)?(.?)\{([$shortcodes]+)(.*?)(\/)?\}(?(4)|(?:(.+?)\{\/\s*\\2\s*\}))?(.?)(\<\/p\>)?/s";
В GetSimple эта проблема решается 3 способом, только не очень изящное решение у них:
Можно еще посмотреть как WordPress обрабатывает шорткоды.