WordPress удаляет теги <p>?

14 мар. 2014 г., 15:34:43
Просмотры: 27.2K
Голосов: 7

Я уже сталкивался со случаем, когда WordPress добавлял теги <p>. Однако сейчас я столкнулся с противоположной ситуацией. Когда я добавляю шорткоды [] внутри тегов <p>, WordPress автоматически удаляет теги <p>.

<p>[anyshortcode]Привет Мир[/anyshortcode]</p>

Превращается в:

Привет Мир

Добавление dir="ltr" к тегам <p>, похоже, решает проблему. Возможно, есть способ добавить это программно ко всем тегам <p>?

Есть идеи, как это исправить?

2
Комментарии

Вы можете использовать плагин Advanced TinyMCE, который более мощный и также обеспечивает работу тегов p.

Foxsk8 Foxsk8
14 мар. 2014 г. 23:21:50

используйте 'wpautop'. Пример: '<?php echo wpautop('[anyshortcode]'); ?>'

user2584538 user2584538
23 мар. 2016 г. 08:17:54
Все ответы на вопрос 5
0

Это именно то, о чем упомянул Foxsk8 в комментарии, поэтому заслуга принадлежит ему, но эти дополнительные инструкции будут полезны. Плагин WordPress под названием TinyMCE Advanced решит вашу проблему.

Этот плагин имеет опцию внутри раздела Настройки > TinyMCE Advanced, которая исправит исчезающие теги <p>. Отметьте чекбокс с надписью Прекратить удаление тегов <p> и <br /> при сохранении и показывать их в текстовом редакторе, и ваши теги <p> будут сохранены.

13 дек. 2014 г. 20:47:56
0

TinyMCE разработан для упрощения редактирования (хотя для тех, кто разбирается в HTML, это не всегда так). По умолчанию он не должен принимать теги <p> вокруг [БЛОКОВ]. Это связано с тем, что "[]" используются для шорткодов не только в WordPress, но и во множестве других PHP-ориентированных CMS. Шорткоды должны иметь правильную обёртку для контента.

Это означает, что решение заключается в добавлении тегов <p> в код вашего шорткода, чтобы ваш контент был обёрнут так, как вам нужно.

23 сент. 2014 г. 21:16:36
0

В дополнение к ответам Foxsk8 и E. Serrano. Если пост содержит <p> вокруг шорткодов, WordPress всё равно удалит их. Это происходит в фильтре shortcode_unautop, который добавляется в файле '\wp-includes\default-filters.php'. Он гарантирует, что шорткоды не будут обёрнуты в <p>...</p>.

Поэтому нам нужно удалить этот фильтр:

remove_filter( 'the_content', 'shortcode_unautop' );
3 нояб. 2019 г. 21:27:09
1

Вы можете добавить следующий код в файл function.php:

function content_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));
            }
    }

    $array = array(
            '<p>[' => '[',
            ']</p>' => ']',
            ']<br />' => ']'
    );

    $new_content = strtr($new_content, $array);

    return $new_content;

}

Теперь вызовите эту функцию там, где это необходимо, например:

<?php echo content_formatter( get_field('field_name') ); ?>
23 мая 2016 г. 09:45:58
Комментарии

Было бы неплохо добавить немного объяснений вместо просто публикации кода.

bravokeyl bravokeyl
23 мая 2016 г. 10:06:04
1
-2

Добавьте этот код в файл functions.php вашей темы.

remove_filter( 'the_content', 'wpautop' );
14 мар. 2014 г. 20:54:31
Комментарии

Смотрите также в других местах. У меня не работает.

Garavani Garavani
18 окт. 2023 г. 18:32:51