大家好,我只是想防止在wordpress帖子中创建空白段落。尝试手动分隔内容时,这种情况经常发生。

我不知道为什么它不生效?
/ update:

问题似乎是这样的:帖子和页面。即使在我的后端中,帖子完全没有段落且没有多余的空格,结果看起来还是这样:

>

评论

看到问题:我正在使用过滤器删除自动包装的

标签


尝试在wpautop做到这一点之前运行过滤器,例如。 add_filter('the_content','qanda',7); ..

@ t31os:您可以将评论移至答案,以便我们对其进行投票吗?

#1 楼

WordPress会自动插入<p></p>标签,以分隔帖子或页面中的内容中断。如果出于某些原因想要或需要删除它们,则可以使用以下任一代码片段。

要完全禁用wpautop过滤器,可以使用: >
remove_filter('the_content', 'wpautop');


如果您仍然希望此功能起作用,请尝试将更高的优先级值添加到过滤器中,例如:

评论


谢谢!我知道wordpress会自动插入p标签。但是,有时候在我的内容中某个地方(当我使用某种工具进行检查时)只有空的

标记...在进行大量删除和编辑帖子时会发生这种情况。我只是不想在我的内容中有空的段落,仅此而已。我确实需要段落,但不是空的。 99999没什么不同。就是行不通。 wpautop过滤器不是我想要的。它防止所有

和自动格式化。我就是不想有空的p!

–mathiregister
2011年4月3日在12:23


我更新了我的帖子,所以您明白我的意思了!我做了一个已经过滤内容的功能。它插入div,似乎wordpress在它之前和之后插入

,我只是不明白。有任何想法吗?

–mathiregister
2011年4月3日13:02

#2 楼

我遇到了同样的问题。我只是做了一个...可以说...不是很漂亮的解决方案,但是它有效,到目前为止,这是我唯一的解决方案。我添加了一些JavaScript行。它需要jQuery,但我敢肯定,没有它就可以弄清楚。

这是我的小JS:我!

评论


哦,那不是一个甜蜜的小数字!感谢您的提示-它对我有用,如果其他人想知道如何使用它,只需将其放在主题的自定义JS文件中即可。

–索尔
2012年9月6日下午5:08

您也可以使用CSS执行此操作:p:empty {display:none; }

–user68816
16年7月20日在1:42

@D_N使用CSS隐藏空的段落标签仅对

有效,而对

\ n

不起作用。

–迈克尔·埃克隆德(Michael Ecklund)
17年4月21日在20:51



#3 楼

只需使用CSS

p:empty {
  display: none;
}


评论


请在回答中添加解释

–Pieter Goosen
2015年9月30日下午13:49

@PieterGoosen已经不言自明了

–至少三个字符
2015年10月1日在12:23

如果您只是想避免出于间距目的而显示它们,则此版本在IE9之前效果都很好。 caniuse.com/#feat=css-sel3和developer.mozilla.org/zh-CN/docs/Web/CSS/%3了解更多。

–将
16年3月3日在21:11

CSS选择器方法的不错选择,不知道它是否存在。谢谢!

– i_a
16 Apr 14 '11:47

FYI: If there is   inside the

tag this won't work.

– laszlo-horvath
Jun 6 '19 at 14:52


#4 楼

我知道这已经被标记为“已解决”,但是仅供参考,这是一个功能,可以完全满足您的需要,而无需在帖子中添加任何标记。只需将其放在主题的function.php中即可:

评论


关于使用force_balance_tags()的一点说明...当此函数用于包含JavaScript的内容时(在表单上使用Ajax时,JS来自Gravity Forms),我遇到了一个棘手的错误。在某些情况下,force_balance_tags遇到<字符时,存在已知问题。有关详细信息,请参见票证[9270](core.trac.wordpress.org/ticket/9270)。

–戴夫·罗姆西
13年8月14日在21:56



我遇到了Dave强调的相同问题:该代码段删除了嵌入的youtube视频,这也导致放大器页面上的验证问题。

–马可·帕尼奇(Marco Panichi)
19年6月29日在12:14

#5 楼

您可以在令人讨厌的wpautop挂接并弄乱标记之前运行过滤器。它会挂上,在某些情况下确实有帮助。

#6 楼

与我之前的2个回答相同的方法,
但是更新了正则表达式,因为他的正则表达式对我不起作用。 p标签内的空白或/<p>(?:\s|&nbsp;)*?<\/p>/i的所有大小写都不敏感。

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);


#7 楼

我发现这很奇怪,但实际上调用the_content()会以您描述的方式插入段落。如果您想要html代码(基本上就像您输入的一样)(与编辑时的“查看HTML”相同),请使用get_the_content(),它返回内容而不包含格式和段落标签。确保使用类似以下内容的内容:

echo get_the_content();


另请参见:http://codex.wordpress.org/Function_Reference/get_the_content

评论


好,谢谢。但是我不想要那个!我需要正常的段落。首先是语义标记,其次就是它应该采用的方式。我只是没有没有意义的空段!仅仅是因为我对这些段落应用了样式,所以这种样式也会出现空的段落,并且我的页面看起来很奇怪。

–mathiregister
2011年4月3日在14:54

我实际上想知道为什么我的add_filter东西无法正常工作?

–mathiregister
2011年4月3日在14:55

知道了好吧,我建议您尝试的一件事是从HTML切换到视觉,再返回一两个时间。我相信在所见即所得编辑器加载时,它确实会删除空的段落标签。

– cwd
2011年4月4日,3:11

#8 楼

这将递归删除字符串中的所有空html标签。

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Return if string not given or empty.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Recursive empty HTML tags.
       return preg_replace (

              //** Pattern written by Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/>/imsU',

             //** Replace with nothing if string empty.
             !is_string ($repto) ? '' : $repto,

            //** Source string
           $str
);}


模式取自http://codesnap.blogspot.in/2011/04/recursively-remove -empty-html-tags.html

#9 楼

如果您的内容中包含<p>标签,并且您的帖子中有空格,
您可以在帖子或页面上进行非可视化的编辑。 >删除它,空的&nbsp;标签将消失。

#10 楼

为了只包含不带
标记的html内容,我们可以使用以下循环仅放出html而不格式化帖子或页面的格式

#11 楼

如果您在页面或帖子的顶部获得空的<p>标签,通常是由于将<?php the_content();?>包裹在段落标签中引起的。页面/帖子:
<p>
解决方案
如果删除<p><?php the_content();?></p>标签并且仅具有模板标签,则可以解决问题。
<p>