Всякий раз, когда я размещаю некоторый контент на странице сообщения WordPress, он показывает некоторые теги абзаца, такие как <p>
и <br/>
. Что показывает лишнее пространство на выходе. Так есть ли решение для этого? Как удалить все теги?
Удаление тегов <p>и <br/"> в сообщениях WordPress
Ответ 1
Это происходит из-за WordPress wpautop
.
Просто добавьте ниже строку кода в тему functions.php файл
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
Для получения дополнительной информации: http://codex.wordpress.org/Function_Reference/wpautop
Ответ 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-разметки не рекомендуются.
Надеюсь, что это поможет
Ответ 3
попробуйте это
$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;
Ответ 4
Удаление фильтра wpautop
не является самым гибким решением.
Если вы ищете решение по страницам или сообщение по почте, вы можете использовать этот плагин:
https://wordpress.org/plugins/dont-muck-my-markup/
Он добавит флажок на каждой странице/странице, чтобы вы могли выбрать, будет ли поведение core-Wordpress отключено для этой конкретной страницы или нет.
Это особенно полезно, если вы хотите опубликовать некоторый HTML-код, а автоматически созданный <br>
и <p>
испортить ваш тщательно спроектированный дизайн.
У плагина также есть глобальная опция, поэтому вы можете отключить эту функцию по умолчанию на всех страницах/сообщениях.
Альтернативный плагин https://wordpress.org/plugins/preserve-code-formatting/ однако я только пробовал тот, который я описал.
Ответ 5
Используйте этот код, чтобы удалить <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' );
Ответ 6
используйте это $ editor = wp_filter_nohtml_kses ($ _ POST ['editor1']);
Ответ 7
Поскольку принятый ответ здесь не работал у меня в WP 4.8.1, я отправляю обходной путь, который работал у меня. Мне просто пришлось добавить класс в p, а WordPress не удалит его.
<p class="whatever">
Ответ 8
Иногда удаление функции WordPress wpautop в вашей теме functions.php не работает (по некоторым причинам).
Так что у меня есть другое решение, как остановить удаление <br>
тегов или двойные (<br><br>
) разрывы строк.
- Внесите изменения в свой файл
/wp-content/themes/your_theme_name/functions.php
Добавьте 2 строки в начало своих функций.
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
Сначала будет отключена функция wpautopop
.
-
Внесите изменения в файл
/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>
после открытия или закрытия блока метки.
Надеюсь, это поможет! И прочитайте комментарии в этом файле - они помогут вам понять, что вам нужно включить или выключить.