Wordpress 创建空 <p> 标签?

Wordpress Creating Empty <p> Tags?

似乎 wordpress 无缘无故地创建了空的 p 标签。我通常通过摆脱所有白色 space 来纠正这个问题 - 因为白色 space 似乎被解释为 "P TAG HERE! PLACE A P TAG HERE".

这是我关注的 Wordpress 仪表板内容:

[block]<p>This is a test</p>[/block]

如您所见,没有白色space。

这是 HTML 同一块 html 的表示。

<div class="block sidebar">
<p>This is a test</p>
<p></p></div>

看到第二个 <p></p> 是无缘无故的吗?

有人可以告诉我为什么会发生这种情况以及我如何(如果有的话)补救这种情况吗?

我也创建了那个短代码 [block] 并且一直在其他页面上使用它没有这个问题。所以它似乎是特定于页面的(因为那是有道理的..不是)。

非常感谢任何帮助。如有必要,我可以向页面提供 link。让我知道。

仪表板的外观:

将此添加到您的 functions.php 即可解决问题

add_filter('the_content', 'shortcode_empty_paragraph_fix');
function shortcode_empty_paragraph_fix($content) {
    $array = array(
        '<p>['    => '[',
        ']</p>'   => ']',
        ']<br />' => ']',
        ']<br>'   => ']',
    );

    $content = strtr($content, $array);

    return $content;
}

wordpress之所以尝试格式化代码是因为一个叫wpautop的函数 https://codex.wordpress.org/Function_Reference/wpautop

我从这个帖子中找到了一个解决方案并稍微调整了一下: Wordpress - empty p tags

add_filter('the_content', 'remove_empty_p', 11);
function remove_empty_p($content){
    $content = force_balance_tags($content);
    //return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
    return preg_replace('#<p></p>#i', '', $content);
}

第三个参数11为优先级。对我来说,wpautop 过滤器的优先级为 10,所以我将过滤器设置为 11,这解决了我的问题。

感谢所有试图提供帮助的人!