En una clase de complemento, quiero proporcionar campos simples para datos públicos: correo electrónico, número de teléfono, Twitter, etc. La lista se puede ampliar.
Consulte el complemento Datos de contacto público en GitHub para obtener más detalles.
Para mantener el uso simple, también quiero ofrecer códigos cortos que sean fáciles de escribir:
[public_email]
[public_phone]
[public_something]
La única diferencia es la segunda parte. No quiero más argumentos para los códigos cortos porque son propensos a errores. Así que registro un controlador shortcode para todos los campos en mi clase de complemento:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Ahora shortcode_handler()
tiene que saber qué shortcode se ha llamado. Mi pregunta es: ¿Cómo hago esto?
Mi solución actual es otra función:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Esto ... funciona para the_content()
. Pero no es elegante ni robusto.
He leído wp-includes/shortcodes.php
, pero no puedo ver ahora cómo hacerlo mejor.
Respuestas:
Esto no se ha probado , pero la función de devolución de llamada se proporciona con una serie de argumentos,
$args
que proporcionan (si los hay) los parámetros proporcionados con el shortocode. La entrada zeroth a veces contiene el nombre del shortcode utilizado (ppublic_email
. Ej .). Por a veces quiero decir ...(Ver el Codex ). Para sus propósitos, entonces
$atts[0]
contendrá cualquierapublic_email
,public_phone
etc.fuente
$args
, el segundo$content
y el último, el shortcode!$args
. Pero si eso funciona para usted ...: D.Según la respuesta de Stephen Harris , hice que mi controlador catch all acepte un tercer argumento, que es el nombre de código corto:
Véalo en acción en el complemento vinculado en mi pregunta.
fuente