删除WordPress文章中的<p>和<br/>标签

54

每当我在WordPress文章页面发布一些内容时,它会显示一些像<p><br/>这样的段落标签。这将在输出中显示一些额外的空间。那么有没有解决方法?如何删除所有标签?

10个回答

109
这是由于WordPress的wpautop引起的。只需在主题的functions.php文件中添加下面这行代码即可:

remove_filter( 'the_content', 'wpautop' );

remove_filter( 'the_excerpt', 'wpautop' );

更多信息请参考:http://codex.wordpress.org/Function_Reference/wpautop

如果我的WordPress.com博客出现这种情况,我该怎么办? - Santiago
很遗憾,您无法控制WordPress.com上的代码。如果您有权从管理面板编辑functions.php文件,则可以使用上述代码行。 - Santosh S

3

我不建议使用remove_filter选项,因为它会在您调用模板中的所有标记和标记时删除它们。

最好的方法是通过PHP对字符串进行清理

您可以使用php函数strip_tags来删除无用的标记: echo strip_tags(get_the_excerpt()); // 从当前文章中获取原始文本摘要

或者

echo strip_tags(category_description()); // 从当前分类页获取原始文本cat desc

这将在调用当前wordpress文章时从中删除所有HTML标记。

您还可以添加trim函数以防万一: echo trim(strip_tags(get_the_excerpt())); // 从当前文章中获取原始文本摘要

或者

echo trim(strip_tags(category_description())); // 从当前分类页获取原始文本cat desc

这很适合获取meta =“description”和title的原始文本,在这些地方不推荐使用HTML标记。

希望有所帮助


2
尝试一下。
$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;

gowri- 你的代码很棒,但是这段代码要插入到哪里呢? - Albuquerque Web Design
在模板中,您使用the_content()函数。但是Santosh的答案比我更完美... - Gowri

2

移除wpautop过滤器并不是最灵活的解决方案。如果您正在寻找逐页或逐篇文章的解决方案,您可以使用此插件:

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

它将在每个文章/页面上添加一个复选框,供您选择是否禁用该特定页面的核心WordPress行为。
当您想发布一些HTML代码时,自动生成的`
`和`

`会破坏您精心设计的布局,这时它尤其有用。

该插件还具有全局选项,因此您可以默认关闭所有页面/文章的此行为。
另一个替代插件是https://wordpress.org/plugins/preserve-code-formatting/,但我只尝试了我描述的那个。

这是一个非常好的非编程解决方案,它对于在HTML的<textarea>中呈现代码非常有用。否则代码将显示:var foo="bar"; <br/> - Rob
感谢,工作得很顺利。在WordPress中使用CodeMirror的文本区域。 - undefined

1
使用此代码在编辑器初始化之前删除<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' );

0

默认情况下,WordPress会在分类描述中添加段落<p></p>标签。通过将以下内容添加到您的functions.php文件中,可以停止这种行为。

// Remove p tags from category description
remove_filter('term_description','wpautop');

简单易懂(无需编码)。

谢谢


0

由于这里的被接受的答案在 WP 4.8.1 中对我无效,所以我发布了一个解决方法,它对我有效。我只需要给 p 添加一个类,WordPress 就不会将其删除。

<p class="whatever">

你误解了,这些人想要移除p标签。 - random_user_name

-1
有时在您的主题的functions.php中删除WordPress的wpautop函数不起作用(由于某些原因)。
所以我有另一个解决方案,如何停止删除
标签或双(

)换行符。
  1. 更改文件/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);更改为//$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);
    

    这将防止系统

    希望这能有所帮助!请阅读此文件中的评论 - 它们将帮助您了解需要打开或关闭哪些内容。

  • 2
    不建议修改WP核心文件。一旦你覆盖了某些东西(比如wp-includes中的formatting.php),更新WP可能会变成一场噩梦。尽可能避免这种情况。 - muka.gergely

    -1

    使用以下代码: $editor = wp_filter_nohtml_kses($_POST['editor1']);


    哈哈哈!!!认真的吗?这真的是你的答案还是你写这个时中风了?这与 OP 的问题毫无关系。 - agon024

    -2
    如果您想在WordPress帖子或文本区域中删除p标签而不改变功能,可以使用简单的CSS技巧: CSS:
    .container >p {
    display:none;
    }
    

    HTML:

    <div class = 'container'>
    <!the p tag u dont want here!>
    </div>
    

    这是一个可怕的回复!!!OP想要删除WordPress不断放置的空p和br标签。即使容器元素包含文本和内容,此方法也将删除“container”元素中的所有“p”标签。这不是解决方案。做法不当,你应该感到羞耻! - agon024

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接