以简码传递布尔值


16

在WordPress短代码中,如何传递布尔属性?
这两个[shortcode boolean_attribute="true"]或者[shortcode boolean_attribute=true]是给字符串值。

编辑

如果我使用@brasofilo评论的技巧,知道他们在做什么的用户将没有问题。但是,如果某些用户提供属性false值并获得true值,他们将会迷路。那么还有其他解决方案吗?


2
只是不传递属性而已false,否则true
brasofilo

谢谢@brasofilo。但是还有其他解决方案吗?我认为,如果某些用户提供属性“ false”的值,他们会迷路,但获得“ true”的值。
Sodbileg Gansukh

Answers:


14

易于使用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;
}


很好的答案。但是我认为,如果用户选择正确或错误,那就太好了。抱歉,我不能接受您的回答。
Sodbileg Gansukh

@SodbilegGansukh此代码也可与'true''false'
gmazzap一起使用

@toscho我刚从法典复制并粘贴;)
gmazzap

3
@SodbilegGansukh所有参数都以字符串形式传递,因为它们只能作为字符串输入(键入)。除了这个答案,别无他法。尝试键入无
字符串的

28

作为@GM答案的扩展(这是实现此目标的唯一方法),以下是略微简化/美化的扩展版本(我个人更喜欢):

缩短/美化的变体

boolean检查包含的值就足够了。如果为true,则结果为(bool) true,否则为false。这产生一个情况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)始终传递的第3个参数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不能解决提取的内容,并且会抛出故障消息。


1
哇,这是一个很好的答案。非常感谢。我希望我有足够的声誉来投票支持您的答案。非常感谢您的建议。
2013年

1
我代表您投票,索德比勒。:)
Dero

wp_validate_boolean()WordPress 4.0.0或更高版本中的函数有助于验证布尔值。函数参考developer.wordpress.org/reference/functions/wp_validate_boolean
Aamer Shahzad

@AamerShahzad这是的替代(不需要添加的恕我直言)filter_var( $var, FILTER_VALIDATE_BOOLEAN ).,甚至该函数的docblock本身也说明。
kaiser

@kaiser这仅供参考。
Aamer Shahzad

0

这是基于gmazzap的答案的简短版本:

使用“ 1”或“ 0”,然后使用双爆炸“ !!”进行投射 将“真实/假”值更改为布尔等效值

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

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.