如何让WordPress使用非贪婪的短码解析?

时间:2016-07-15 作者:Leo Jiang

我制作了一个插件,添加了一个带有可选内容的短代码。如果没有内容,WordPress仍会尝试查找结束标记。举个例子可以更清楚地说明这一点:

[span class="foo"]
[span class="bar"]
[span class="baz"]stuff[/span]
通缉犯:

<span class="foo"></span>
<span class="bar"></span>
<span class="baz">stuff</span>
实际值:

<span class="foo">
  [span class="bar"]
  [span class="baz"]stuff
</span>
有没有办法让WordPress产生第一个输出?我预计该插件的许多用户会对这种行为感到困惑。一种方法是修改the_content 之前do_shortcode 跑步,但它很粗糙。有没有干净或现有的方法来改变这种行为?

编辑:我不是在问为什么会发生这种行为,我是在问一种改变这种行为的好方法。

2 个回复
SO网友:webHasan

Wordpress对您的短代码的解释如下:

Wordpress thought your shortcode like

主要问题是,在同一标记的封闭短代码之前有一个相同标记的未封闭短代码,无法正确解析。文档中指出,您可能会遇到以下问题unclosed shortcodes.

当您这样调用快捷码时:

[span class="foo" /]
[span class="bar" /]
[span class="baz"]stuff[/span]
你会得到你预期的结果。

因为self-closing marker / 在您的用例中需要,虽然通常认为它是可选的,但由于它迫使解析器忽略以下结束标记,因此可以得到预期的结果。

上述解决方案是根据WordPress Shortcode API. 如果您想以这样或那样的方式预处理您的短代码,您可以这样做,但通常首先要让您的用户使用正确的语法。

SO网友:Jim Maguire

短代码与打开和关闭标记无关!短代码是执行函数并将结果输出到内容中的一种方法。

add\\u shortcode(\'hello\',myFunction);函数myFunction(){返回“Hello world”;}

在你的帖子中输入短代码[你好]将输出hello World。

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\