Em uma classe de plug-in, desejo fornecer campos simples para dados públicos: email, número de telefone, Twitter etc. A lista pode ser estendida.
Veja o plugin Dados de Contato Público no GitHub para obter detalhes.
Para manter o uso simples, também quero oferecer códigos de acesso fáceis de digitar:
[public_email]
[public_phone]
[public_something]
A única diferença é a segunda parte. Não quero mais argumentos para os códigos de acesso, porque eles são propensos a erros. Então, eu registro um manipulador de shortcode para todos os campos na minha classe de plug-in:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Agora, shortcode_handler()
é necessário saber qual código de acesso foi chamado. Minha pergunta é: como faço isso?
Minha solução atual é outra função:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Isso ... funciona para the_content()
. Mas não é elegante nem robusto.
Eu li wp-includes/shortcodes.php
, mas não consigo ver agora como fazê-lo melhor.
Respostas:
Isso não foi testado , mas a função de retorno de chamada é fornecida com uma matriz de argumentos,
$args
que fornece (se houver) os parâmetros fornecidos com o código de acesso. A entrada zeroth às vezes contém o nome do código de acesso usado (por exemplopublic_email
). Às vezes eu quero dizer ...(Veja o Codex ). Para seus propósitos,
$atts[0]
conterápublic_email
,public_phone
etc.fonte
$args
, o segundo$content
e o último o shortcode!$args
. Mas se isso funcionar para você ...: D.Com base na resposta de Stephen Harris , fiz meu manipulador catch all aceitar um terceiro argumento, que é o nome abreviado:
Veja em ação no plugin vinculado na minha pergunta.
fonte