封闭短码

使用短码的两种情况是:

  • 短码是一个自我关闭的标签,就像我们在“基本短消息”部分中看到的那样。
  • 短码是封闭的内容。

封闭内容

用短码封装内容可以对封闭的内容进行操作。

[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]封闭内容”的单个短代码。