现在我们知道如何创建一个基本的短代码,以及如何使用它作为自我关闭和封闭,我们将使用短代码`[$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'); ```