在短码中传递布尔值

时间:2013-10-18 作者:Sodbileg Gansukh

在WordPress短代码中,如何传递布尔属性
两者[shortcode boolean_attribute="true"][shortcode boolean_attribute=true] 正在提供字符串值。

编辑

如果我使用@brasofilo评论的技巧,对于知道自己在做什么的用户来说不会有任何问题。但有些用户如果给出属性就会迷路false 值和接收true 价值那么还有其他解决方案吗?

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

易于使用01 值,然后在函数内进行类型转换:

[shortcode boolean_attribute=\'1\'][shortcode boolean_attribute=\'0\']

但如果你愿意,你也可以严格检查\'false\' 并将其指定给boolean,这样您也可以使用:

[shortcode boolean_attribute=\'false\'][shortcode boolean_attribute=\'true\']

然后:

add_shortcode( \'shortcode\', \'shortcode_cb\' );

function shortcode_cb( $atts ) {
  extract( shortcode_atts( array(
    \'boolean_attribute\' => 1
  ), $atts ) );
  if ( $boolean_attribute === \'false\' ) $boolean_attribute = false; // just to be sure...
  $boolean_attribute = (bool) $boolean_attribute;
}

SO网友:kaiser

作为@G.M.answer(这是唯一可行的方法)的扩展,这里有一个略为缩短/美化和扩展的版本(我个人更喜欢):

缩短/美化的变体boolean 检查包含的值。如果是true, 结果将是(bool) true, 否则将是错误的。这将生成一个案例true, 其他一切false 后果

add_shortcode( \'shortcodeWPSE\', \'wpse119294ShortcodeCbA\' );
function wpse119294ShortcodeCbA( $atts ) {
    $args = shortcode_atts( array(
        \'boolAttr\' => \'true\'
    ), $atts, \'shortcodeWPSE\' );

    $args[\'boolAttr\'] = \'true\' === $args[\'boolAttr\'];
}
扩展/用户安全变体我之所以喜欢这个版本,是因为它允许用户输入on/yes/1 作为的别名true. 当用户不记得实际值时,这减少了用户出错的机会true

add_shortcode( \'shortcodeWPSE\', \'wpse119294ShortcodeCbA\' );
function wpse119294ShortcodeCbA( $atts ) {
    $args = shortcode_atts( array(
        \'boolAttr\' => \'true\'
    ), $atts, \'shortcodeWPSE\' );

    $args[\'boolAttr\'] = filter_var( $args[\'boolAttr\'], FILTER_VALIDATE_BOOLEAN );
}
其他注意事项:

1)始终传递shortcode_atts(). 否则,无法定位快捷码属性过滤器。

// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );
2)切勿使用extract(). 甚至core也希望减少这些通话。同样糟糕的是global 变量,因为IDE没有机会解析提取的内容,并且会抛出失败消息。

SO网友:ntheorist

Here a shorter simple version, building on gmazzap\'s answer:

使用“1”或“0”,然后使用“双重爆炸”将“truthy/false”值更改为其布尔等效值

注意:这不适用于“true”和“false”字符串,仅适用于“1”和“0”

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args[\'myvar\'];
   var_dump($myvar); // prints bool(false)
}

结束

相关推荐

Custom field in a shortcode?

我无法将图像从我的一个字段转换为短代码(它与get_the_post_thumbnail($post->ID, \'thumbnail\') 但我需要字段中的值udstiller logo.function logo_shortcode( $atts ) { extract( shortcode_atts( array( \'limit\' => \'50\', \'orderby\' => \'name\',