Je cherche un moyen de reproduire ce qui est décrit dans la documentation: Un rappel de shortcode surchargé.
Selon la documentation, le tableau $atts
contiendra la chaîne correspondant au regcode shortcode. La position dans $atts
dépend de si le nom du rappel correspond au shortcode ou non. L'exemple suivant est tiré de la documentation:
add_shortcode('foo','foo'); // two shortcodes referencing the same callback
add_shortcode('bar','foo');
produces this behavior:
[foo a='b'] ==> callback to: foo(array('a'=>'b'),NULL,"foo");
[bar a='c'] ==> callback to: foo(array(0 => 'bar', 'a'=>'c'),NULL,"");
Alors j'ai enregistré mes shortcodes comme ceci:
add_shortcode('foo', 'foo');
add_shortcode('bar', 'foo');
function foo($attributes, $content = null) {
echo '<pre>';
var_dump($attributes);
echo '</pre>';
}
Malheureusement, $ attributs est toujours vide, il ne contient pas le nom du shortcode (WP 4.0).
Est-ce une erreur dans la documentation ou est-ce que je me trompe quelque part?
Je pense que vous avez simplement oublié d'exécuter les codes courts [foo a='b']
et [bar a='c']
via le filtre do_shortcode
:
do_shortcode( '[foo a='b'] [bar a='c']' )
La sortie de the_content()
est filtrée à travers le do_shortcode
, vous pouvez donc simplement l'ajouter à votre éditeur.
En exécutant votre code, je reçois le résultat suivant pour le dump $arguments
:
array (size=1)
'a' => string 'b' (length=1)
et
array (size=1)
'a' => string 'c' (length=1)
donc il n'y a pas de '0' => 'bar'
partie ici.
Mais vous pouvez obtenir la balise shortcode actuelle à partir du troisième paramètre (=) du rappel (j'en ai entendu parler pour la première fois dans this répond par @toscho)
Je viens de vérifier la source et si nous vérifions la fonction do_shortcode_tag
, nous trouverons:
// self-closing tag
return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, null, $tag ) . $m[6];
où $tag
est le troisième paramètre contenant la balise shortcode.
Donc, dans votre cas, vous pouvez changer votre rappel en:
function foo( $attributes = array(), $content = null, $tag = '' ) {
echo $tag; // current shortcode tag
echo '<pre>';
var_dump($attributes);
echo '</pre>';
}
pour obtenir des informations sur la balise shortcode actuelle.
Les rappels de shortcode obtiennent un troisième argument avec le nom de shortcode. il y a une note à ce sujet dans la documentation:
Apparaît toujours comme troisième argument à partir de 2.9.2.
add_shortcode('foo', 'wpse173855_shortcode');
add_shortcode('bar', 'wpse173855_shortcode');
function wpse173855_shortcode($atts, $content, $name)
{
echo '<pre>';
var_dump($name);
echo '</pre>';
}
Un coup d'œil à la source révèle que le shortcode qui a été mis en correspondance est toujours transmis.