一些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 ) );
}
我肯定能找到我自己解决这个问题的方法,但如果有一个很好的方法可以做到这一点,我很感兴趣。
SO网友:fuxia
使用0
和1
作为快捷码值,并使用它显示或隐藏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()
. 曾经