WordPress 短码(Shortcode)创建和应用
短码(Shortcode)在 WordPress 中类似一种宏代码,它可以用一种简短的声明置入文章内容或者 Html 代码中,以动态导入的方式实现某种特定的功能。使用短码的好处就是可以在内容中集成功能,由于不是程序代码,所以使用起来简单、干净、整洁,特别是对于普通的用户很友好。另外,短码可以传递参数,这样可以针对不同的需求灵活地实现相应的功能。
创建短码的程序结构很简单,如下代码所示:
function my_shortcode($atts = [], $content = null)
{
// 对短码要显示的内容 $content 做处理
...
// 返回内容
return $content;
}
function my_shortcodes_init()
{
add_shortcode('mysc', 'my_shortcode'); // 定义短码及其关联的功能函数
}
add_action('init', 'my_shortcodes_init');
定义好短码后,使用方法如下:
[mysc atts1=param1, atts2=param2, …]要传入短码的内容[/mysc]
其中:mysc 就是定义的短码名称,后面紧跟的是要传入短码的参数,接着后面是要传入短码的内容,这两个部分会通过短码功能函数的参数传入到短码处理函数中,就是上面的 my_shortcode($atts = [], $content = null) 函数。
另外,为保证传入短码的参数和内容的有效性,短码功能函数需要做一些校验和预处理操作,主要有以下四个方面:
1、参数名称处理:把名称做小写处理,使用函数 array_change_key_case
2、参数值缺省化处理:把一些参数值改成缺省值,使用函数 shortcode_atts
3、内容处理:对内容做输出前处理,确保有效性,使用函数 apply_filters
4、短码嵌套处理:对内容里包含的短码做处理,使用函数 do_shortcode
下面给出一个例子做参考:
function my_shortcode($atts = [], $content = null, $tag = '')
{
// 传入参数名称小写化
$atts = array_change_key_case((array)$atts, CASE_LOWER);
// 修改传入参数为缺省值
$my_atts = shortcode_atts([
'title' => '我的课程',
], $atts, $tag);
// 准备短码内容输出
$o = '';
$o .= '<div class="sc-box">';
$o .= '<h2>' . esc_html__($my_atts['title'], '课程') . '</h2>';
if (!is_null($content)) {
// 传入内容预处理
$o .= apply_filters('the_content', $content);
// 短码嵌套处理
$o .= do_shortcode($content);
}
$o .= '</div>';
// 短码处理后的完整输出
return $o;
}
短码建议放到插件里面实现。