Wordpress removing <p> tags?

时间:2014-03-14 作者:Lisandro Vaccaro

我已经遇到一个Wordpress添加<p> 标签。然而,现在我正在处理相反的情况。当我在里面添加[]个短代码时<p> WordPress自动删除标记<p> 标签。

<p>[anyshortcode]Hello World[/anyshortcode]</p>
成为:

Hello World
将dir=“ltr”添加到<p> 标签似乎解决了这个问题,也许有一种方法可以通过编程将其添加到所有<p> 标签?

有没有办法解决这个问题?

5 个回复
SO网友:E. Serrano

这和Foxsk8在评论中提到的差不多,所以应该归功于他,但这些额外的说明会很有用。WordPress插件调用TinyMCE Advanced 会解决你的问题。

该插件内置一个选项Settings > TinyMCE Advanced 那会修复你的消失<p> 标签。将复选框标记为Stop removing the <p> and <br /> tags when saving and show them in the Text editor 还有你的<p> 标签将被保留。

SO网友:STing

TinyMCE的编程目的是使编辑变得简单(对于我们HTML悟性通常不是这样)。默认情况下为“不应接受”<p> 在[块]周围标记。这是因为“[]”不仅在WP中用于短代码,而且在大量基于PHP的CMS中也用于短代码。短代码应该具有适当的内容包装器。

意味着解决方案是添加<p> 在您的短代码中添加标记,以便按照您想要的方式包装您的内容。

SO网友:Seraphinite Solutions

作为Foxsk8E. Serrano. 如果post包含<p> 对于短代码,WP仍将删除它。它在shortcode_unautop 在“\\wp”中添加的筛选器包括\\个默认筛选器。php’。它确保短代码不被包装在<p>...</p>.

因此,我们需要删除它们:

remove_filter( \'the_content\', \'shortcode_unautop\' );

SO网友:TMA

您可以在函数中添加以下代码。php文件

function content_formatter($content){

    $new_content = \'\';
    $pattern_full = \'{(\\[raw\\].*?\\[/raw\\])}is\';
    $pattern_contents = \'{\\[raw\\](.*?)\\[/raw\\]}is\';
    $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($pieces as $piece) {
            if (preg_match($pattern_contents, $piece, $matches)) {
                    $new_content .= $matches[1];
            } else {
                    $new_content .= wptexturize(wpautop($piece));
            }
    }

    $array = array(
            \'<p>[\' => \'[\',
            \']</p>\' => \']\',
            \']<br />\' => \']\'
    );

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

    return $new_content;
}

现在在需要的地方调用此函数,如下所示;

<?php echo content_formatter( get_field(\'field_name\') ); ?>

SO网友:Jack

将其附加到函数中。主题文件夹中的php文件。

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

结束