SHORTCODE_UNAUTOP()是否损坏?

时间:2015-02-14 作者:EpF

shortcode_unautop() 在里面/wp-includes/formatting.php 应该在文本块中找到短代码,并从中删除换行段落标记。

在这个过程中,我一直对段落标记存在问题。

以下是var_dump($pee), 我将其放在函数的最开头,即处理前的字符串:

string(353) "<p>[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]</p>
"
如预期的那样,全部包装在段落标记中。

然后我把var_dump(preg_replace( $pattern, \'$1\', $pee )); 函数结束前,给出:

string(346) "[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]
"
它所做的只是从整个块中删除开始和结束标记,而不是每个单独的短代码。我检查了global $shortcode_tags; 我示例中的所有短代码都在其中。

功能是否已损坏,或者我是否对其期望过高?我很确定我没有,而且它应该删除所有段落标记-但我忍不住想还有其他事情在发生,比如意外的空格字符或其他东西。

2 个回复
最合适的回答,由SO网友:EpF 整理而成

功能似乎已损坏。问题在trac中:https://core.trac.wordpress.org/ticket/14050

我用这个暂时解决问题:https://core.trac.wordpress.org/attachment/ticket/14050/plugin.php . 这段代码仍然无法通过所使用的一些测试,但它完全解决了我所描述的问题,因此我将使用它,除非我发现有什么实际问题导致它崩溃。

SO网友:mathieuhays

我一直在阅读WordPress文档中关于这个函数的内容,您在那里的行为是预期会发生的。

此函数清除短代码的外部,而不是内部。正则表达式没有检查短代码的内容。

编辑:

https://developer.wordpress.org/reference/functions/shortcode_unautop/

不要自动p包装独立的短代码

确保短代码不会wrapped 在里面<p>...</p>.

这里什么都说了。

结束

相关推荐

Remove echo from shortcode

我刚刚开始使用短代码,由于缺乏php知识,我无法想出如何在不使用php echo的情况下使用此短代码。有人能帮我修改代码吗?// SPONSORS Shorcode function sponsors_shortcode($atts) { extract(shortcode_atts(array( \"name\" => \"sponsors\", ), $atts)); $args = array( \"