检查属性是否存在于短码中

时间:2014-05-01 作者:JacobTheDev

我已经编写了一个小插件,可以为按钮输出html。它工作得很好,但有一点除外:如果用户没有指定图像,则图像似乎已损坏。是否有一种方法可以让我检查并查看用户是否指定了图像,并仅在这种情况下打印图像代码?

以下是我的插件代码:

function button_shortcode($args) {
    return "<a class=\\"button\\" href=\\"" . $args["url"] . "\\"><img alt=\\"" . $args["bigtext"] . "\\" class=\\"alignleft\\" src=\\"" . $args["img"] . "\\" /><small>" . $args["smalltext"] . "</small>" . $args["bigtext"] . "</a>";
}
add_shortcode("button", "button_shortcode");
以下是短代码:

[button url="http://www.example.com/" img="/path/to/image.png" smalltext="Smaller Text" bigtext="Bigger Text"]

3 个回复
最合适的回答,由SO网友:JacobTheDev 整理而成

Borek指出了正确的方向,这是我的代码*:

function button_shortcode($attributes, $content) {
    if ($attributes["image"] != "") {
        $img = "<img alt=\\"" . $content . "\\" class=\\"alignleft\\" src=\\"" . $attributes["image"] . "\\" />";
    } else {
        $img = "";
    }
    if ($attributes["intro"] != "") {
        $intro = "<small>" . $attributes["intro"] . "</small>";
    }
    return "<a class=\\"button\\" href=\\"" . $attributes["link"] . "\\">" . $img . $intro . $content . "</a>";
}
add_shortcode("button", "button_shortcode");
*注意:我确实更改了一些属性名称和内容,但这不是必需的。

SO网友:Paul G.

好的,我重新编写了函数,以便它执行以下操作:

在使用数组值之前,检查数组值是否已设置。你不能总是确信他们会在那里

我还使用了sprintf(),然后替换了我想要的每一块。更容易阅读,以后可以修改。

希望有帮助!

function button_shortcode($args) {

    if ( empty( $args[\'img\'] ) ) {
        return \'Error - no image source was specified\';
    }

    $sBigText = isset( $args[\'bigtext\'] )? $args[\'bigtext\'] : \'\';
    $sSmallText = isset( $args[\'smalltext\'] )? $args[\'smalltext\'] : \'\';

    $sHtmlToReturn = sprintf( \'<img alt="%s" class="alignleft" src="%s" /><small>%s</small>%s\', $sBigText, $args[\'img\'], $sSmallText, $sBigText );

    if ( !empty( $args[\'url\'] ) ) {
        $sHtmlToReturn = sprintf( \'<a class="button" href="%s">%s</a>\', $args[\'url\'], $sHtmlToReturn );
    }

    return $sHtmlToReturn;
}
保罗。

SO网友:Borek

给这个变量分配一个默认图像怎么样?因此,如果没有指定图像,则使用默认(而不是空)图像url?顺便问一下,这些反斜杠是怎么回事?只需使用单引号和双引号。

function button_shortcode($args) {
    extract(shortcode_atts($default=array(
        \'url\' => \'http://default.com\',
        \'bigtext\' => \'Your default big text\',
        \'img\' => \'http://your-default-img-path.com/img.png\',
        \'small\' => \'Your default small text\',
    ), $args));
    return \'<a class="button" href="\' . $url . \'"><img alt="\' . $bigtext . \'" class="alignleft" src="\' . $img . \'" /><small>\' . $smalltext . \'</small>\' . $bigtext . \'</a>\';
}
add_shortcode("button", "button_shortcode");
现在,如果需要输出单独的按钮(如果图像存在或不存在),请使用如下条件:

function button_shortcode($args) {
    extract(shortcode_atts($default=array(
        \'url\' => \'http://default.com\',
        \'bigtext\' => \'Your default big text\',
        \'img\' => \'\',
        \'small\' => \'Your default small text\',
    ), $args));

    if (!empty($url)) {
        $button_output = \'<a class="button" href="\' . $url . \'"><img alt="\' . $bigtext . \'" class="alignleft" src="\' . $img . \'" /><small>\' . $smalltext . \'</small>\' . $bigtext . \'</a>\';
    } else { 
        $button_output = \'<a class="button" href="\' . $url . \'"><small>\' . $smalltext . \'</small>\' . $bigtext . \'</a>\';
    }

    return $button_output;
}
add_shortcode("button", "button_shortcode");

结束