Wordpress创建空<p>标签?

时间:2016-07-21 18:31:26

标签: wordpress shortcode

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

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

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

正如你所看到的,没有空格。

这是同一段html的HTML表示。

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

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

有人可以告诉我为什么会这样,以及如何(如果有的话)我可以纠正这种情况?

我也创建了短代码[block],并且已经在其他页面上使用它而没有这个问题。因此它似乎特定于页面(因为这有意义......不是。)

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

仪表板的外观如何:

enter image description here

2 个答案:

答案 0 :(得分:1)

将此添加到您的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;
}

答案 1 :(得分:1)

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,这解决了我的问题。

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