【问题标题】:Removing <p> and <br/> tags in WordPress posts删除 WordPress 帖子中的 <p> 和 <br/> 标签
【发布时间】:2011-07-08 13:53:46
【问题描述】:

每当我在 WordPress 帖子页面中发布一些内容时,它都会显示一些段落标签,例如 &lt;p&gt;&lt;br/&gt;。这在输出中显示了一些额外的空间。那么有什么解决办法吗?如何删除所有标签?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    这是因为 WordPress 的 wpautop。 只需在主题的 functions.php 文件中添加以下代码行

    remove_filter( 'the_content', 'wpautop' );

    remove_filter( 'the_excerpt', 'wpautop' );

    欲了解更多信息:http://codex.wordpress.org/Function_Reference/wpautop

    【讨论】:

    • 如果在我的 wordpress.com 博客中发生这种情况,我该怎么办?
    • @santi 不幸的是,您无法控制 wordpress.com 上的代码。如果您有权从管理面板编辑 functions.php 文件,那么您可以使用上面的代码行。
    【解决方案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

    这将在调用它时从当前 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" 和标题的原始文本。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      在编辑器初始化之前使用此代码删除 &lt;p&gt;&lt;/p&gt;

      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' );
      

      【讨论】:

        【解决方案4】:

        试试这个

        $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- 你的代码很酷,但是这段代码是在哪里插入的?
        • 在模板中,您使用_content() 函数。但是桑托什的答案比我的更完美......
        【解决方案5】:

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

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

        它将在每个帖子/页面上添加一个复选框,供您选择是否为该特定页面禁用核心 Wordpress 行为。

        当您想要发布一些 HTML 代码并且自动生成的 &lt;br&gt;&lt;p&gt; 搞乱了您精心设计的设计时,这尤其有用。

        该插件还有一个全局选项,因此您可以在所有页面/帖子上默认关闭此行为。

        另一个插件是https://wordpress.org/plugins/preserve-code-formatting/ 但是我只尝试了我描述的那个。

        【讨论】:

        • 这是一个非常好的非编码解决方案,它对于在 html 的
        【解决方案6】:

        有时在主题的functions.php中删除WordPress的wpautop函数不起作用(出于某些原因)。

        所以我有另一个解决方案如何停止删除&lt;br&gt; 标记或双 (&lt;br&gt;&lt;br&gt;) 换行符。

        1. 更改您的文件/wp-content/themes/your_theme_name/functions.php

        在函数顶部添加 2 行。

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

        这将首先关闭wpautopop 功能。

        1. 在函数wpautop 中更改文件/wp-includes/formatting.php

          A) 将 function wpautop( $pee, $br = true) 更改为 function wpautop( $pee, $br = false)

          这将额外关闭所有位置的wpautopop 功能。

          B) 将 $pee = preg_replace('|&lt;br\s*/?&gt;\s*&lt;br\s*/?&gt;|', "\n\n", $pee); 更改为

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

          这将防止系统删除双 &lt;br&gt; 标签。 (我知道代码很奇怪但简单的//$pee 在这里没有帮助,因为?&gt; 标签)。

          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);
          

          这将防止系统在打开之后或关闭块元素标记(如&lt;div&gt;&lt;article&gt; 等)之前删除换行符。

          E) 改变这个:

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

          到那个:

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

          几乎一样:这将防止系统在打开之后或关闭块元素标记之前删除换行符,如&lt;div&gt;&lt;article&gt; 等。

          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);
          

          这将阻止系统删除块末尾的&lt;br&gt;

          G) 改变这个:

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

          到那个:

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

          这将阻止系统在打开或关闭块标记之后删除&lt;br&gt;

        希望它会有所帮助!并阅读此文件中的 cmets - 它们将帮助您了解需要打开或关闭什么。

        【讨论】:

        • 真的不建议修改WP核心文件。一旦您覆盖某些内容(例如 wp-includes 中的formatting.php),更新您的 WP 可能会成为一场噩梦。尽可能避免这种情况。
        【解决方案7】:

        使用这个 $editor= wp_filter_nohtml_kses($_POST['editor1']);

        【讨论】:

          【解决方案8】:

          如果您想在 Wordpress 帖子或 textarea 中删除 p 标记而不改变功能,您可以执行一个简单的 css 技巧,例如: css:

          .container >p {
          display:none;
          }
          

          html:

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

          【讨论】:

            【解决方案9】:

            由于此处接受的答案在 WP 4.8.1 中对我不起作用,因此我发布了一个对我有用的解决方法。我只需要向 p 添加一个类,WordPress 不会删除它。

            <p class="whatever">
            

            【讨论】:

            • 你误会了。这些人希望删除 p 标签。
            【解决方案10】:

            默认情况下,WordPress 会将段落&lt;p&gt;&lt;/p&gt; 标签添加到类别描述中。通过将以下内容添加到您的 functions.php 文件

            来停止此操作
            // Remove p tags from category description
            remove_filter('term_description','wpautop');
            

            简单易用(无代码)。

            谢谢

            【讨论】:

              猜你喜欢
              • 2012-10-30
              • 2016-10-23
              • 2018-05-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多