WordPress中文开发手册

WordPress插件开发 — 封闭短码

使用短代码的两种情况是:

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

封闭内容

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

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

Tags