Как я могу удалить абзац из содержимого коротких кодов?


Если вы создали шорткоды в Wordpress, вы, возможно, заметили, что, когда вы получаете содержимое своего шорткода, оно завернуто в теги html-абзацев.

Я не знаю, почему программисты сделали это. Мне кажется очень плохой идеей добавлять форматирование к фактическому содержимому.

Я нашел сообщение, в котором представлено это решение:

Http://donalmacarthur.com/articles/cleaning-up-wordpress-shortcode-formatting/

Но я интересно: Есть ли решение, предлагаемое самим API wordpress, или что-то, чего мне здесь не хватает?

 1
Author: SpyrosP, 2011-06-20

3 answers

Короткие коды, поскольку они вставлены в редактор, соответствуют правилам редактора. Нажатие на возврат в редакторе создаст тег абзаца, как и любой другой текст. Это одна из особенностей TinyMCE. Чтобы узнать больше о TinyMCE, ознакомьтесь с их форумом и особенно в этой теме

 3
Author: Daniel Sachs, 2011-06-20 04:15:36

Ссылка в вашем вопросе теперь исчезла, поэтому я не уверен в предложенном решении, но вот другое решение для потомков:

Добавьте следующее в functions.php чтобы запустить форматирование после оценки коротких кодов:

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);

Автор отмечает, что вам нужно будет явно включить форматирование в плагинах, которые этого требуют:

function my_shortcode($atts) {
    $content = wpautop(trim($content));
    [snip]
 1
Author: ptim, 2012-08-14 06:54:16

Простое решение, которое сработало для меня, состоит в том, чтобы просто удалить конец абзаца "

" из начала содержимого $, а начало абзаца "

" из конца содержимого $.

Например, с регулярным выражением, таким как:

function fix_paragraphs($content)
{
    $patterns = array('/^<\/p>/i', '/<p>$/i');
    return preg_replace($patterns, '', $content);
}

Или, если вы уверены, что они будут там, вы можете просто обрезать их вот так:

return substr($content, 4, -3);
 1
Author: Davor Bokun, 2020-10-14 01:53:20