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

EDIT

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

评论

只需不传递属性,您将得到false,否则为true。

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

#1 楼

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

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

,但如果需要,也可以严格检查'false'并将其分配给布尔值,通过这种方式,您还可以使用:

[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;
}


评论


不要使用extract()。 :)

– fuxia♦
13-10-18在10:53

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

– Sodbileg Gansukh
13-10-18在10:53

@SodbilegGansukh此代码也可用于'true'和'false'

– gmazzap♦
13-10-18在10:56



@toscho我刚刚从抄本中复制并粘贴了;)

– gmazzap♦
13-10-18在10:57

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

– fuxia♦
13-10-18在10:59



#2 楼

作为@GM的扩展答案(这是唯一可行的方法),以下是略微缩短/美化的版本和扩展版本(我个人更喜欢):

缩短/美化版本

足以对包含的值进行boolean检查。如果为true,则结果为(bool) true,否则为false。这样会产生一个案例true,其他所有结果false结果。是它允许用户键入on/yes/1作为true的别名。当用户不记得true的实际值是多少时,这会减少出现用户错误的可能性。

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

    $args['boolAttr'] = 'true' === $args['boolAttr'];
}


其他说明:

1)始终传递shortcode_atts()的第三个参数。否则,短目标码属性过滤器将无法定位。

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

    $args['boolAttr'] = filter_var( $args['boolAttr'], FILTER_VALIDATE_BOOLEAN );
}


2)请勿使用extract()。甚至core都希望减少这些呼叫。同样,global变量也更糟,因为IDE不能解决提取的内容,并且会抛出失败消息。

评论


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

– Sodbileg Gansukh
13-10-18在11:16



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

– ero
13-10-18在11:50

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

– Aamer Shahzad
18-09-8在6:34



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

– kaiser
18年9月8日在19:53

@kaiser这仅供参考。

– Aamer Shahzad
18/09/10在13:41

#3 楼

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

使用'1'或'0',然后使用双引号“ !!”进行转换会将“ truthy / falsey”值更改为等效的布尔值

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

[myshortcode myvar="0"]

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