Transmettre la valeur booléenne en shortcode

13

Dans les codes courts WordPress, comment puis-je transmettre des attributs booléens?
[shortcode boolean_attribute="true"] ou [shortcode boolean_attribute=true] donnent des valeurs de chaîne.

EDIT

Il n'y aurait aucun problème pour les utilisateurs qui savent ce qu'ils font si j'utilise le truc commenté par @brasofilo. Mais certains utilisateurs seront perdus s'ils donnent un attribut false valeur et reçoivent true valeur. Y a-t-il une autre solution?

    
posée Sodbileg Gansukh 18.10.2013 - 12:32

2 réponses

14

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 rigoureusement 'false' et l'attribuer à un booléen. 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;
}
    
réponse donnée gmazzap 18.10.2013 - 12:42
24

En tant qu'extension 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):

Variante raccourcie / embellie

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 cas true , tout le reste false result.

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

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

Variante étendue / sécurisée pour l'utilisateur

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

Notes complémentaires:

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) N'utilisez jamais extract() . Même le noyau veut réduire ces appels. C’est également pire pour les variables de global , car les IDE n’ont aucune chance de résoudre le contenu extrait et génèrent des messages d’échec.

    
réponse donnée kaiser 18.10.2013 - 13:10

Lire d'autres questions sur les étiquettes