使用短代码的两种情况是: - 短代码是一个自我关闭的标签,就像我们在“基本短消息”部分中看到的那样。 - 短码是封闭的内容。 ## 封闭内容 用短码封装内容可以对封闭的内容进行操作。 ``` [wporg]内容来操纵[/ wporg] ``` 如上所述,为了封装一部分内容,您需要做的所有操作都添加了一个类似于HTML的开始[$tag]和结束[/$tag]。 ## 处理封闭内容 让我们回到我们原来的[wporg]短代码: ``` <?php function wporg_shortcode($atts = [], $content = null) { // do something to $content // always return return $content; } add_shortcode('wporg', 'wporg_shortcode'); ``` 看看回调函数,我们看到我们选择接受两个参数$atts和$content。 $content参数将保留我们附带的内容。 稍后我们会谈谈$atts。 $content的默认值设置为null,因此我们可以通过使用PHP函数is_null()来区分自我关闭标签和封闭标签。 shortcode [$tag],包括其内容和结束[/$tag]将被替换为处理函数的返回值。 >[warning] 警报:处理函数负责保护输出。 ## 短码截图 短码解析器对帖子的内容执行单次传递。 这意味着如果一个短码处理程序的$content参数包含另一个短码,则不会被解析。 ``` [wporg]another [shortcode] is included[/wporg] ``` 通过在处理函数的最终返回值上调用do_shortcode()可以在其他短码内使用短码。 ``` <?php function wporg_shortcode($atts = [], $content = null) { // do something to $content // run shortcode parser recursively $content = do_shortcode($content); // always return return $content; } add_shortcode('wporg', 'wporg_shortcode'); ``` ## 限制 短代码解析器无法处理相同[$tag]的封闭和非封闭形式的混合。 ``` [wporg] non-enclosed content [wporg]enclosed content[/wporg] ``` 解析器将其视为由文本“非封闭内容”分隔的两个短码,而不是将其视为包围“非封闭内容[wporg]封闭内容”的单个短代码。