Wordpress - Pass boolean value in shortcode
As an extension to @G.M. answer (which is the only possible way to do this), here's a slightly shortened/beautified and and an extended version (which I personally prefer):
Shortened/Beautified variant
It's enough to do a boolean
check for the contained value. If it's true
, the result will be (bool) true
, else it will be false. This produces a one case true
, everything else false
result.
add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
$args = shortcode_atts( array(
'boolAttr' => 'true'
), $atts, 'shortcodeWPSE' );
$args['boolAttr'] = 'true' === $args['boolAttr'];
}
Extended/User-safe variant
The reason why I prefer this version is that it allows the user to type in on/yes/1
as an alias for true
. This reduces the chance for user errors when the user doesn't remember what the actual value for true
was.
add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
$args = shortcode_atts( array(
'boolAttr' => 'true'
), $atts, 'shortcodeWPSE' );
$args['boolAttr'] = filter_var( $args['boolAttr'], FILTER_VALIDATE_BOOLEAN );
}
Additional notes:
1) Always pass the 3rd argument for shortcode_atts()
. Else the shortcode attributes filter is impossible to target.
// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );
2) Never use extract()
. Even core wants to reduce those calls. It's equally worse to global
variables, as IDEs don't stand a chance to resolve the extracted contents and will throw failure messages.
Is easy to use 0
and 1
values and then typecasting inside the function:
[shortcode boolean_attribute='1']
or [shortcode boolean_attribute='0']
but if you want you can also strictly check for 'false'
and assign it to boolean, in this way you can also use:
[shortcode boolean_attribute='false']
or [shortcode boolean_attribute='true']
Then:
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;
}