使用短码的两种情况是:
- 短码是一个自我关闭的标签,就像我们在“基本短消息”部分中看到的那样。
- 短码是封闭的内容。
封闭内容
用短码封装内容可以对封闭的内容进行操作。
[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]
将被替换为处理函数的返回值。
警报:处理函数负责保护输出。
短码截图
短码解析器对帖子的内容执行单次传递。这意味着如果一个短码处理程序的 $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]封闭内容”的单个短代码。