【发布时间】:2011-07-08 13:53:46
【问题描述】:
每当我在 WordPress 帖子页面中发布一些内容时,它都会显示一些段落标签,例如 <p> 和 <br/>。这在输出中显示了一些额外的空间。那么有什么解决办法吗?如何删除所有标签?
【问题讨论】:
标签: wordpress
每当我在 WordPress 帖子页面中发布一些内容时,它都会显示一些段落标签,例如 <p> 和 <br/>。这在输出中显示了一些额外的空间。那么有什么解决办法吗?如何删除所有标签?
【问题讨论】:
标签: wordpress
这是因为 WordPress 的 wpautop。
只需在主题的 functions.php 文件中添加以下代码行
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
欲了解更多信息:http://codex.wordpress.org/Function_Reference/wpautop
【讨论】:
我不建议使用 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
这将在调用它时从当前 wordpress 帖子中删除所有 HTML 标记。
您还可以添加修剪功能,以防出现以下情况:
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
这非常适合获取不推荐 HTML 标记的 meta="description" 和标题的原始文本。
希望对你有帮助
【讨论】:
在编辑器初始化之前使用此代码删除 <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' );
【讨论】:
试试这个
$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;
【讨论】:
删除wpautop 过滤器并不是最灵活的解决方案。
如果您正在寻找逐页解决方案,或逐个发布,您可以使用此插件:
https://wordpress.org/plugins/dont-muck-my-markup/
它将在每个帖子/页面上添加一个复选框,供您选择是否为该特定页面禁用核心 Wordpress 行为。
当您想要发布一些 HTML 代码并且自动生成的 <br> 和 <p> 搞乱了您精心设计的设计时,这尤其有用。
该插件还有一个全局选项,因此您可以在所有页面/帖子上默认关闭此行为。
另一个插件是https://wordpress.org/plugins/preserve-code-formatting/ 但是我只尝试了我描述的那个。
【讨论】:
有时在主题的functions.php中删除WordPress的wpautop函数不起作用(出于某些原因)。
所以我有另一个解决方案如何停止删除<br> 标记或双 (<br><br>) 换行符。
/wp-content/themes/your_theme_name/functions.php
在函数顶部添加 2 行。
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
这将首先关闭wpautopop 功能。
在函数wpautop 中更改文件/wp-includes/formatting.php。
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); 更改为 //$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>。
希望它会有所帮助!并阅读此文件中的 cmets - 它们将帮助您了解需要打开或关闭什么。
【讨论】:
使用这个 $editor= wp_filter_nohtml_kses($_POST['editor1']);
【讨论】:
如果您想在 Wordpress 帖子或 textarea 中删除 p 标记而不改变功能,您可以执行一个简单的 css 技巧,例如: css:
.container >p {
display:none;
}
html:
<div class = 'container'>
<!the p tag u dont want here!>
</div>
【讨论】:
由于此处接受的答案在 WP 4.8.1 中对我不起作用,因此我发布了一个对我有用的解决方法。我只需要向 p 添加一个类,WordPress 不会删除它。
<p class="whatever">
【讨论】:
默认情况下,WordPress 会将段落<p></p> 标签添加到类别描述中。通过将以下内容添加到您的 functions.php 文件
// Remove p tags from category description
remove_filter('term_description','wpautop');
简单易用(无代码)。
谢谢
【讨论】: