[shortcode boolean_attribute="true"]
或[shortcode boolean_attribute=true]
都提供字符串值。EDIT
对于那些如果我使用@brasofilo评论的技巧,知道他们在做什么。但是,如果某些用户提供
false
属性值并收到true
值,则会迷路。还有其他解决方案吗?#1 楼
易于使用0
和1
的值,然后在函数内部进行类型转换:[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)
}
评论
只需不传递属性,您将得到false,否则为true。谢谢@brasofilo。但是还有其他解决方案吗?我认为,如果某些用户赋予属性“ false”值,他们会迷路,但获得“ true”值。