Dans les codes courts WordPress, comment puis-je passer des attributs booléens?[shortcode boolean_attribute="true"]
ou [shortcode boolean_attribute=true]
donnent tous deux des valeurs de chaîne.
MODIFIER
Il n'y aurait aucun problème pour les utilisateurs qui savent ce qu'ils font si j'utilise l'astuce commentée par @brasofilo. Mais certains utilisateurs seront perdus s'ils attribuent une valeur d'attribut false
et reçoivent une valeur true
. Alors, y a-t-il une autre solution?
Il est facile d’utiliser les valeurs 0
et 1
, puis de transtyper dans la fonction:
[shortcode boolean_attribute='1']
ou [shortcode boolean_attribute='0']
mais si vous le souhaitez, vous pouvez également vérifier strictement 'false'
et l’affecter à un booléen. De cette manière, vous pouvez également utiliser:
[shortcode boolean_attribute='false']
ou [shortcode boolean_attribute='true']
Ensuite:
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;
}
Dans le prolongement de @ G.M. réponse (qui est le seul moyen possible de le faire), voici une version légèrement raccourcie/embellie et une version étendue (que je préfère personnellement):
Il suffit de faire une vérification boolean
pour la valeur contenue. Si c'est true
, le résultat sera (bool) true
, sinon ce sera faux. Cela produit un résultat true
à un cas, tout le reste false
.
add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
$args = shortcode_atts( array(
'boolAttr' => 'true'
), $atts, 'shortcodeWPSE' );
$args['boolAttr'] = 'true' === $args['boolAttr'];
}
La raison pour laquelle je préfère cette version est qu’elle permet à l’utilisateur de taper on/yes/1
comme alias pour true
. Cela réduit les risques d'erreur lorsque l'utilisateur ne se souvient pas de la valeur réelle de 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) Passez toujours le 3ème argument pour shortcode_atts()
. Sinon, le filtre d'attributs de shortcode est impossible à cibler.
// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );
2) Ne jamais utiliser extract()
. Même le noyau veut réduire ces appels. C'est également pire pour les variables global
, car les IDE n'ont aucune chance de résoudre le contenu extrait et enverront des messages d'échec.