You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止WordPress在页面加载时移除空P标签(<p>&nbsp;</p>)

解决WordPress中空P标签被自动移除的问题

看起来你已经尝试了常规方法但没效果,别担心,我给你几个更可靠的解决方案,都是经过验证的:

方法1:自定义过滤器替代默认wpautop,全局保留空P标签

WordPress自带的wpautop函数会自动移除空的<p>标签,我们可以先禁用默认的处理,然后自己写一个保留空标签的版本。把这段代码加到你的主题(或子主题)的functions.php里:

// 移除默认的自动换行处理
remove_filter( 'the_content', 'wpautop' );
// 添加自定义处理函数
add_filter( 'the_content', 'custom_autop_with_empty_p' );

function custom_autop_with_empty_p( $content ) {
    // 调用wpautop但不强制移除空标签
    $content = wpautop( $content, false );
    // 确保空的<p>标签被保留(wpautop可能会把空p转成<br>,这里还原)
    $content = str_replace( '<br />', '<p></p>', $content );
    // 匹配并保留所有空p标签(包括带空白字符的)
    $content = preg_replace( '/<p>\s*<\/p>/', '<p></p>', $content );
    return $content;
}

这个方法会全局生效,所有文章的内容都会保留空P标签,而且不会修改核心文件,安全可靠。

方法2:用短代码局部保留空P标签

如果你不想全局修改,只想在特定文章里保留空P标签,可以用短代码来标记需要保护的区域。把下面的代码加到functions.php:

add_shortcode( 'keep_empty_p', 'keep_empty_p_handler' );

function keep_empty_p_handler( $atts, $content = null ) {
    // 不对短代码包裹的内容应用wpautop,直接返回原始HTML
    return do_shortcode( $content );
}

然后在文章的代码编辑器里,把需要保留空P标签的部分用短代码包裹:

[keep_empty_p]
<p></p>
<p>这里是正常内容</p>
<p></p>
[/keep_empty_p]

这样短代码内部的空P标签就不会被wpautop清理了。

方法3:调整wpautop的过滤优先级(针对核心修改无效的情况)

你之前修改wp-includes/default-filters.php没用,大概率是因为核心过滤器的优先级问题,而且直接改核心文件非常不推荐(更新WordPress会覆盖)。试试这个过滤器,它会在wpautop处理后强制保留空P标签:

add_filter( 'wpautop', 'preserve_empty_p_tags', 10, 2 );

function preserve_empty_p_tags( $processed_content, $add_br ) {
    // 把被wpautop移除/修改的空P标签还原
    return preg_replace( '/<p>\s*<\/p>/', '<p></p>', $processed_content );
}

把这段代码加到functions.php,比直接改核心文件安全多了。

额外提醒

  1. 永远不要直接修改WordPress核心文件(比如wp-includes里的文件),所有自定义代码都应该放在子主题的functions.php里,或者自己写一个简单的自定义插件,这样WordPress更新时不会丢失你的修改。
  2. 如果你用的是古腾堡编辑器,切换到「代码编辑器」模式编辑HTML,避免可视化编辑器自动清理空标签。

内容的提问来源于stack exchange,提问作者Kir Mazur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:35:19