J'installe un plugin avec un shortcode imbriqué, c'est-à-dire.
[ct_training_group]
[ct_training]
[/ct_training_group]
Voici le problème: j'utilise le code [ct_training]
à l'extérieur du parent ainsi qu'à l'intérieur de celui-ci, et je souhaite afficher quelque chose de légèrement différent dans chaque cas. Lorsqu'il se trouve dans un groupe, je dois omettre les <ul>
et </ul>
dans lesquels je voudrais envelopper le shortcode [ct_training]
lorsqu'il est appelé seul.
Je pense que la meilleure façon de faire serait de passer une variable du parent à l’enfant. Y a-t-il une manière élégante de faire cela sans avoir besoin de jouer avec des globals ou autres?
Merci.
Je suppose que vous passez simplement le contenu de ct_training_group
à un autre appel de do_shortcode()
? Vous ne pouvez pas lui transmettre de paramètres supplémentaires. Par conséquent, si vous ne souhaitez pas utiliser de variables d'état globales, vous pouvez toujours remplacer le gestionnaire de shortcode actuel pour ct_training
par un autre qui n'ajoute pas le <ul>
supplémentaire. Il semble qu'il n'y ait pas de cache pour les gestionnaires, il n'y aura donc pas de pénalité de performances.
add_shortcode('ct_training', 'ct_training_full');
function ct_training_full($attr, $content)
{
return '<ul>' . ct_training_item($attr, $content) . '</ul>';
}
function ct_training_item($attr, $content)
{
return '<li>CT Training</li>';
}
add_shortcode('ct_training_group', 'ct_training_group_handler');
function ct_training_group_handler($attr, $content)
{
$output = '<h3>CT Training group</h3>';
$output .= '<ul>';
// Redefine the sub-code
add_shortcode('ct_training', 'ct_training_item');
$output .= do_shortcode($content);
// Reset the sub-code
add_shortcode('ct_training', 'ct_training_full');
$output .= '</ul>';
return $output;
}