带参数的短码

现在我们知道如何创建一个基本的短代码,以及如何使用它作为自我关闭和封闭,我们将使用短代码[$tag]和处理函数中的参数。短码[$tag]可以接受参数,称为属性:

[wporg title="WordPress.org"]
Having fun with WordPress.org shortcodes.
[/wporg]

Shortcode处理函数可以接受3个参数:

  • $atts - array - [$tag]属性
  • $content - string - 发布内容
  • $tag - string - [$tag] 的名称(即短码的名称)
function wporg_shortcode($atts = [], $content = null, $tag = '') {}

解析属性

对于用户来说,短信只是在帖子内容中带有方括号的字符串。 用户不知道哪些属性可用,幕后发生什么。

对于插件开发人员,无法强制使用属性的策略。 用户可以包括一个属性,两个或全部。

为了控制如何使用短码:

  • 声明处理函数的默认参数
  • 使用array_change_key_case()对属性数组执行关键案例的归一化
  • 使用shortcode_atts()提供默认值array和user $ atts来解析属性
  • 在返回之前确保输出

完整例子

完整的示例使用基本的短代码结构,处理自我关闭和封闭场景,缩短代码并确保输出。

一个[wporg]短码,将接受一个标题,并将显示一个框,我们可以用CSS风格。

<?php
function wporg_shortcode($atts = [], $content = null, $tag = '')
{
    // normalize attribute keys, lowercase
    $atts = array_change_key_case((array)$atts, CASE_LOWER);
 
    // override default attributes with user attributes
    $wporg_atts = shortcode_atts([
                                     'title' => 'WordPress.org',
                                 ], $atts, $tag);
 
    // start output
    $o = '';
 
    // start box
    $o .= '<div class="wporg-box">';
 
    // title
    $o .= '<h2>' . esc_html__($wporg_atts['title'], 'wporg') . '</h2>';
 
    // enclosing tags
    if (!is_null($content)) {
        // secure output by executing the_content filter hook on $content
        $o .= apply_filters('the_content', $content);
 
        // run shortcode parser recursively
        $o .= do_shortcode($content);
    }
 
    // end box
    $o .= '</div>';
 
    // return output
    return $o;
}
 
function wporg_shortcodes_init()
{
    add_shortcode('wporg', 'wporg_shortcode');
}
 
add_action('init', 'wporg_shortcodes_init');
下一节:可以在TinyMCE的可视化编辑器中解析短码,并使它们呈现实际内容,而不是短码本身。