web-dev-qa-db-fra.com

Passer la valeur booléenne en shortcode

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?

14
Sodbileg Gansukh

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;
}
14
gmazzap

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):

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 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'];
}

Variante étendue/sécurisée

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) 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.

27
kaiser