Dans une classe de plugin, je veux fournir des champs simples pour les données publiques: email, numéro de téléphone, Twitter, etc. La liste peut être étendue.
Voir le plugin Public Contact Data sur GitHub pour plus de détails.
Pour simplifier l'utilisation, je souhaite également proposer des shortcodes faciles à taper:
[public_email]
[public_phone]
[public_something]
La seule différence est la deuxième partie. Je ne veux pas d'autres arguments pour les shortcodes car ils sont sujets aux erreurs. Donc j'enregistrer un gestionnaire de shortcode pour tous les champs dans ma classe de plug - in:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Il shortcode_handler()
faut maintenant savoir quel shortcode a été appelé. Ma question est: comment faire?
Ma solution de contournement actuelle est une autre fonction:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Cela… fonctionne pour the_content()
. Mais il n'est ni élégant ni robuste.
J'ai lu wp-includes/shortcodes.php
, mais je ne vois pas pour l'instant comment faire mieux.
Réponses:
Ceci n'est pas testé , mais la fonction de rappel est fournie avec un tableau d'arguments,
$args
qui donnent (le cas échéant) les paramètres fournis avec le shortocode. L'entrée zéro contient parfois le nom du shortcode utilisé (par exemplepublic_email
). Parfois, je veux dire ...(Voir le Codex ). Pour vos fins
$atts[0]
contiendra alors soitpublic_email
,public_phone
etc.la source
$args
, le second$content
et le dernier le shortcode!$args
. Mais si cela fonctionne pour vous ...: D.Sur la base de la réponse de Stephen Harris, j'ai fait en sorte que mon gestionnaire catch all accepte un troisième argument, qui est le nom du shortcode:
Voyez-le en action dans le plugin lié dans ma question.
la source