是否更改不同短码属性的变量值?

时间:2015-03-30 作者:Kreation

假设我有一个函数,需要能够根据短代码中的属性加载文件:

[open_file ex1]
我如何定义将哪个文件名设置为$csv 取决于短代码中给定的属性?

下面的代码不起作用,但说明了我要做的事情。

function open_file($atts) {

    if ($atts = "ex1") {
        $csv = "ex1.csv"

    } elseif ($atts = "ex2") {
        $csv = "ex2.csv"

    } elseif ($atts = "ex3") {
        $csv = "ex3.csv"

1 个回复
SO网友:Pieter Goosen

看来你可能有很多.csv 文件。我建议只使用一个属性,然后将适当的名称传递给该属性或文件名的前缀,然后从那里构建文件名。

您可以尝试以下操作之一(我没有进行任何验证,在返回短代码中的任何内容之前,您应该检查属性是否为空以及文件是否存在)

选项1传递完整的文件名(我个人的选择)

add_shortcode( \'open_file\', \'custom_file\' );
function custom_file( $atts )
{
    $attributes = shortcode_atts( array(
        \'file\' => \'\',
    ), $atts );

    return $attributes[\'file\'];
}
然后按如下方式使用

[open_file file=\'ex1.csv\']
选项2将前缀传递给属性

add_shortcode( \'open_file\', \'custom_file\' );
function custom_file( $atts )
{
    $attributes = shortcode_atts( array(
        \'file\' => \'\',
    ), $atts );

    $filename = $attributes[\'file\'] . \'.csv\';
    return $filename;
}
然后按如下方式使用

[open_file file=\'ex1\']
通过使用上述任何一种方法都可以消除非常长且不必要的if/else 陈述

结束

相关推荐

Multiple level shortcodes

我正在开发一个插件,遇到了一种情况,我希望有人能帮我找到一个解决方案。我想要一个短代码结构,如:[shortcode_1] [shortcode_2] [shortcode_3] [shortcode_4][/shortcode_4] [/shortcode_3] [/shortcode_2] [/shortcode_1] 但如果我使用add\\u短代码,只有第一个短代码有效。。。有没有办法得到这样的短代码结构?谢谢