WordPress 短码(Shortcode)创建和应用

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;
}

短码建议放到插件里面实现。

发表评论

邮箱地址不会被公开。 必填项已用*标注