Удаление тегов <p> и <br/> в сообщениях WordPress

42

Всякий раз, когда я размещаю некоторый контент на странице сообщения WordPress, он показывает некоторые теги абзаца, такие как <p> и <br/>. Что показывает лишнее пространство на выходе. Так есть ли решение для этого? Как удалить все теги?

Теги:

8 ответов

90
Лучший ответ

Это происходит из-за WordPress wpautop. Просто добавьте ниже строку кода в тему functions.php файл

remove_filter( 'the_content', 'wpautop' );

remove_filter( 'the_excerpt', 'wpautop' );

Для получения дополнительной информации: http://codex.wordpress.org/Function_Reference/wpautop

  • 0
    Что я могу сделать, если это происходит со мной в моем блоге на wordpress.com?
  • 0
    @santi К сожалению, вы не можете контролировать код на wordpress.com. Если у вас есть права на редактирование файла functions.php из панели администратора, вы можете использовать приведенную выше строку кода.
Показать ещё 1 комментарий
2

Я бы не рекомендовал использовать параметр remove_filter, поскольку он будет удалять теги и разметки везде, где вы их называете в своем шаблоне.

Лучший способ - очистить вашу строку через PHP

вы можете использовать функцию php strip_tags для удаления бесполезных надбавок: echo strip_tags(get_the_excerpt()); // Get the raw text excerpt from the current post

или

echo strip_tags(category_description()); // Get the raw text cat desc from the current cat page

это приведет к удалению всех тегов HTML из текущего сообщения Wordpress при его вызове.

вы также можете добавить функцию обрезки только в случае: echo trim(strip_tags(get_the_excerpt())); // Get the raw text excerpt from the current post

или

echo trim(strip_tags(category_description())); // Get the raw text cat desc from the current cat page

это идеально подходит для получения необработанного текста для meta = "description" и title, где HTML-разметки не рекомендуются.

Надеюсь, что это поможет

1

Удаление фильтра wpautop не является самым гибким решением. Если вы ищете решение по страницам или сообщение по почте, вы можете использовать этот плагин:

https://wordpress.org/plugins/dont-muck-my-markup/

Он добавит флажок на каждой странице/странице, чтобы вы могли выбрать, будет ли поведение core-Wordpress отключено для этой конкретной страницы или нет.

Это особенно полезно, если вы хотите опубликовать некоторый HTML-код, а автоматически созданный <br> и <p> испортить ваш тщательно спроектированный дизайн.

У плагина также есть глобальная опция, поэтому вы можете отключить эту функцию по умолчанию на всех страницах/сообщениях.

Альтернативный плагин https://wordpress.org/plugins/preserve-code-formatting/ однако я только пробовал тот, который я описал.

  • 0
    Это очень хорошее решение без кодирования, оно полезно для представления кода в <textarea> html. В противном случае код покажет: var foo = "bar"; <br/>
1

попробуйте это

$my_postid = $post->ID;
$content_post = get_post($my_postid);
$content = $content_post->post_content;
$content = apply_filters('the_content', $content);
$content = strip_tags($content, '<p><br/>');
echo $content;
  • 0
    gowri - Ваш код классный, но куда этот код вставляется?
  • 0
    В шаблоне, где вы используете функцию the_content (). Но ответ Сантоша более совершенен, чем мой ...
0

Иногда удаление функции WordPress wpautop в вашей теме functions.php не работает (по некоторым причинам).

Так что у меня есть другое решение, как остановить удаление <br> тегов или двойные (<br><br>) разрывы строк.

  1. Внесите изменения в свой файл /wp-content/themes/your_theme_name/functions.php

Добавьте 2 строки в начало своих функций.

remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

Сначала будет отключена функция wpautopop.

  1. Внесите изменения в файл /wp-includes/formatting.php в функцию wpautop.

    A) Измените function wpautop( $pee, $br = true) на function wpautop( $pee, $br = false).

    Это дополнительно отключит функцию wpautopop из всех мест.

    B) Изменить $pee = preg_replace('|<br\s*/?>\s*<br\s*/?>|', "\n\n", $pee); в

    $pee1 = $pee;
    $pee = preg_replace('|<br\s*/?>\s*<br\s*/?>|', "\n\n", $pee);
    $pee = $pee1;
    

    Это предотвратит систему от удаления двойных <br> меток. (Я знаю, что код странный, но простой //$pee здесь не помогает из-за тега ?>).

    C) Изменить $pee = preg_replace("/\n\n+/", "\n\n", $pee); to //$pee = preg_replace("/\n\n+/", "\n\n", $pee);

    Это предотвратит удаление системы несколькими разрывами строк.

    D) Измените это:

    $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
    

    к этому:

    //$pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
    

    Это не позволит системе удалять разрывы строк после открытия или перед тегом элемента закрывающего блока, например <div>, <article> и т.д.

    E) Измените это:

    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
    

    к этому:

    //$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
    

    Довольно же: это предотвратит удаление системы прерываний после открытия или перед тегом элемента закрывающего блока, например <div>, <article> и т.д.

    F) Измените это:

    $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
    

    к этому:

    // $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
    

    Это предотвратит систему от удаления <br> в конце блока.

    G) Измените это:

    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    

    к этому:

    //$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    

    Это предотвратит систему от удаления <br> после открытия или закрытия блока метки.

Надеюсь, это поможет! И прочитайте комментарии в этом файле - они помогут вам понять, что вам нужно включить или выключить.

  • 0
    На самом деле не рекомендуется изменять основные файлы WP. Как только вы что-то перезаписаете (например, formatting.php в wp-includes), обновление вашего WP может стать кошмаром. Избегайте этого, когда можете.
0

Поскольку принятый ответ здесь не работал у меня в WP 4.8.1, я отправляю обходной путь, который работал у меня. Мне просто пришлось добавить класс в p, а WordPress не удалит его.

<p class="whatever">
  • 0
    Вы недоразумение. Эти люди ХОТЯТ удалить теги p.
0

используйте это  $ editor = wp_filter_nohtml_kses ($ _ POST ['editor1']);

0

Используйте этот код, чтобы удалить <p></p> до инициализации редактора.

function tinymce_remove_root_block_tag( $init ) {
    $init['forced_root_block'] = false; 
    return $init;
}
add_filter( 'tiny_mce_before_init', 'tinymce_remove_root_block_tag' );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню