如何在短码中处理没有价值的属性?

时间:2013-07-21 作者:Jan Beck

一些HTML元素接受无价值的属性,例如<input disabled /><video autoplay />

如果我想在默认情况下禁用自动播放(=完全忽略属性),但可以选择启用它,那么如何处理这种情况。

可能的情况:

// [video]
<video>

// [video autoplay]
<video autoplay="autoplay"> // using XML syntax

// [video autoplay="autoplay"]
<video autoplay="autoplay"> 

// [video autoplay="false"]
<video autoplay="false"> // value doesn\'t matter - video will still auto play
这样做的标准方式对我没有帮助I don\'t want to have a default value:

// http://codex.wordpress.org/Shortcode_API#Attributes
function my_shortcode_handler( $atts, $content = null ) {
    extract( shortcode_atts( array(
        \'attr_1\' => \'attribute 1 default\',
        \'attr_2\' => \'attribute 2 default\',
    // ...etc
    ), $atts ) );
}
我肯定能找到我自己解决这个问题的方法,但如果有一个很好的方法可以做到这一点,我很感兴趣。

2 个回复
SO网友:fuxia

使用01 作为快捷码值,并使用它显示或隐藏HTML属性。

元素示例input 以及属性required:

function input_shortcode( $atts )
{
    $values = shortcode_atts(
        array (
            \'type\'     => \'text\',
            \'value\'    => \'\',
            \'name\'     => \'\',
            \'id\'       => \'\',
            \'required\' => 0,
        ),
        $atts
    );

    $values = array_map( \'esc_attr\', $values );

    return sprintf(
        \'<input type="%1$s"%2$s%3$s%4$s%5$s>\',
        $values[ \'type\' ], // 1
        \'\' === $values[ \'name\' ]     ? \'\' : \' \' . $values[ \'name\' ], // 2
        \'\' === $values[ \'value\' ]    ? \'\' : \' \' . $values[ \'value\' ], // 3
        \'\' === $values[ \'id\' ]       ? \'\' : \' \' . $values[ \'id\' ], // 4
        0  === $values[ \'required\' ] ? \'\' : \' required\' // 5
    );
}
求你了don’t use extract(). 曾经

SO网友:Rarst

无名属性仍在传递给短代码处理程序,它们只是无法通过名称访问(因为,duh!)

您可以使用数字键循环遍历属性,并检查是否存在autoplay 价值,从而实现[video autoplay] 变种

参见类似问题-Shortcode But Without The Equals Sign?

结束

相关推荐

Wrap Shortcodes and wpautop

WP让我现在拔出头发(过去几天一直在努力解决)。尝试做一些简单的短代码,这些代码围绕着文章的各个要点。然而,我认为wpautop()正在造成巨大破坏。我尝试了网络上的各种建议,包括viperbonds(VIP.N:行情)和viperbonds(VIP.N:行情)等http://www.viper007bond.com/2009/11/22/wordpress-code-earlier-shortcodes/ ) 控制短代码何时运行,但无论是在wpautop之前还是之后运行,我仍然会遇到各种麻烦。它只格式化