Certains éléments HTML acceptent des attributs sans valeur tels que <input disabled />
ou <video autoplay />
Comment gérer ce cas avec des codes courts où je veux désactiver la lecture automatique par défaut (= omettre l'attribut du tout) mais l'activer éventuellement.
Scénarios possibles:
// [video]
<video>
// [video autoplay]
<video autoplay="autoplay"> // using XML syntax
// [video autoplay="autoplay"]
<video autoplay="autoplay">
// [video autoplay="false"]
<video autoplay="false"> // value doesn't matter - video will still auto play
La façon habituelle de faire cela ne m'aide pas car je ne veux pas avoir de valeur par défaut :
// http://codex.wordpress.org/Shortcode_API#Attributes
function my_shortcode_handler( $atts, $content = null ) {
extract( shortcode_atts( array(
'attr_1' => 'attribute 1 default',
'attr_2' => 'attribute 2 default',
// ...etc
), $atts ) );
}
Je peux certainement trouver mon propre bidouillage autour de ce problème, mais je suis intéressé s'il y a un joli moyen de le faire.
Utilisez 0
et 1
comme valeurs de shortcode et utilisez cette option pour afficher ou masquer l'attribut HTML.
Exemple avec un élément input
et l'attribut required
:
function input_shortcode( $atts )
{
$values = shortcode_atts(
array (
'type' => 'text',
'value' => '',
'name' => '',
'id' => '',
'required' => 0,
),
$atts
);
$values = array_map( 'esc_attr', $values );
return sprintf(
'<input type="%1$s"%2$s%3$s%4$s%5$s>',
$values[ 'type' ], // 1
'' === $values[ 'name' ] ? '' : ' ' . $values[ 'name' ], // 2
'' === $values[ 'value' ] ? '' : ' ' . $values[ 'value' ], // 3
'' === $values[ 'id' ] ? '' : ' ' . $values[ 'id' ], // 4
0 === $values[ 'required' ] ? '' : ' required' // 5
);
}
Veuillez ne pas utiliser extract()
. Déjà.
Les attributs sans nom sont toujours transmis au gestionnaire de shortcode, ils ne sont tout simplement pas accessibles par nom (parce que, duh!)
Vous pouvez parcourir les attributs avec des touches numériques et vérifier la présence de la valeur autoplay
, obtenant ainsi la variante [video autoplay]
.
Voir question similaire - Shortcode mais sans le signe d'égalité?