编写短码时,哪个是更好的做法:打包大量配置参数,还是只给出一个id?

时间:2012-07-17 作者:Aras

我正在写我的第一个wordpress插件,它在帖子中插入了一个可视化小部件。我计划为我的插件使用一个短代码。我跟着an excellent tutorial about writing shortcodes. 但我心中还有一个问题。我有许多与我的小部件相关的配置参数,例如大小、颜色、背景、类型等。我可以想出两种方法来捕获这些配置。

首先是使用一个简单的短代码,例如:

[my_widget id=1] 
并将其余配置作为记录存储在数据库中。当我解释短代码时,我可以进行查找并检索其余的代码。

第二种方法是将所有配置参数打包到短代码本身中。

[my_widget id=1 color="red" size="600x600" type="one" etc etc etc.]
这将产生一个相当具有讽刺意味的长的短代码,但它不需要数据库查找,还将允许用户就地编辑参数。

我的问题是,您推荐这两种方法中的哪一种来为插件创建短代码?

2 个回复
最合适的回答,由SO网友:Evan Mattson 整理而成

这听起来像是您的短代码所使用的函数有很多可以接受的参数。

总的来说,我肯定认为更好的选择是为要控制的每个参数使用属性。

正如您在该教程中所知,短代码可以为变量定义默认值,并使用短代码中的属性来覆盖它们。这就是我建议你做的。

您甚至可以创建一些不同的核心“样式”,从这些样式开始使用不同的默认值,并且人们可以根据自己的喜好自定义它们。这样,可以从特定的样式开始,然后在必要时覆盖参数,而不是要求每个参数都由短代码本身定义。

查看以下内容:

add_shortcode(\'my_widget\', \'my_widget_shortcode\');
function my_widget_shortcode($atts) {

if(!isset($atts[\'style\']))
    $atts[\'style\'] = \'\'; // if that attribute isn\'t set, it will throw an error in the switch otherwise

    // define defaults based on style
    switch ($atts[\'style\']) {

        // style="1"
        case 1:
            $defaults = array(
                \'color\' => \'red\',
                \'height\' => 600,
                \'width\' => 600,
                );
            break;

        // style="dog"  
        case \'dog\':
            $defaults = array(
                \'color\' => \'green\',
                \'height\' => 400,
                \'width\' => 600,
                );
            break;

        // style="frisbee"
        case \'frisbee\':
            $defaults = array(
                \'color\' => \'blue\',
                \'height\' => 200,
                \'width\' => 200,
                );
            break;

        // no style attribute defined or something else that doesn\'t have a case defined above
        // eg: style="dinosaur"
        default:
            $defaults = array(
                \'color\' => \'yellow\',
                \'height\' => 800,
                \'width\' => 500,
                );
    }

    // merge arrays and override defaults with shortcode atts
    extract(shortcode_atts($defaults, $atts));


    // do some stuff

}

SO网友:Michael Hampton

参数化的短代码不一定要命中数据库,用户可以更容易地理解和自定义它。我认为它总体上是赢的。

结束

相关推荐

Travel Blog Plugins

今年晚些时候,我将使用Wordpress创建一个关于我旅行的博客。我希望该博客具有以下功能我的帖子将被地理定位一张包含帖子位置的地图,可以单击地图上的各个点到达帖子</我正在寻找最好/最合适的插件。谢谢,艾尔。