问题描述
在 WordPress 短码中,我如何传递布尔属性? [shortcode boolean_attribute="true"]
或 [shortcode boolean_attribute=true]
都提供字符串值。
编辑
如果我使用 @brasofilo 评论的伎俩,知道他们正在做什么的用户将没有问题。但是如果一个用户给出了一个属性 false
的值并且接收到 true
的值,一些用户就会丢失。那么还有其他解决方案吗?
最佳解决方案
很容易使用 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;
}
次佳解决方案
作为 @ G.M 的扩展。答案 (这是唯一可能的方法),这里稍微缩短/美化和扩展版本 (我个人更喜欢):
缩短/美化变体
对 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'];
}
扩展/User-safe 变体
我喜欢这个版本的原因是它允许用户输入 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()
。即使是核心想减少这些电话。 global
变量同样更糟,因为 IDE 不能有机会解析提取的内容,并会丢失失败消息。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。