Como fazer o WordPress usar análise de código curto não-gulosa?

3

Eu fiz um plugin que adiciona um shortcode com conteúdo opcional. Se não houver conteúdo, o WordPress ainda tentará procurar uma tag de fechamento. Isto é mais claro com um exemplo:

[span class="foo"]
[span class="bar"]
[span class="baz"]stuff[/span]

Desejado:

<span class="foo"></span>
<span class="bar"></span>
<span class="baz">stuff</span>

Real:

<span class="foo">
  [span class="bar"]
  [span class="baz"]stuff
</span>

Existe uma maneira de fazer o WordPress produzir a primeira saída? Estou esperando que muitos dos usuários do plugin fiquem confusos com esse comportamento. Uma maneira é modificar the_content antes que do_shortcode seja executado, mas é bastante hacky. Existe uma maneira limpa ou existente de mudar esse comportamento?

Editar: não estou perguntando por que esse comportamento ocorre, estou pedindo uma boa maneira de alterar esse comportamento.

    
por Leo Jiang 15.07.2016 / 03:09

2 respostas

10

O Wordpress interpretou seu shortcode assim:

Aquestãoprincipaléquevocêtemumshortcodenãofechadodamesmatagnafrentedeumshortcodedelimitadordamesmatag,quenãoseráanalisadocorretamente.Adocumentaçãodeclaraquevocêpodeencontrarproblemascom códigos de acesso não divulgados .

Quando você chama seu shortcode assim:

[span class="foo" /]
[span class="bar" /]
[span class="baz"]stuff[/span]

Você receberá o resultado esperado.

Como o marcador de fechamento automático / é necessário em seu caso de uso, embora geralmente seja considerado opcional, mas como ele força o analisador a ignorar as tags de fechamento, ele obtém o resultado esperado.

A solução acima é o uso correto de códigos de acesso de acordo com a API de código de acesso do WordPress . Se você quiser pré-processar seu shortcode de uma forma ou de outra, pode fazê-lo, mas geralmente basta fazer com que seus usuários usem a sintaxe correta em primeiro lugar.

    
por webHasan 15.07.2016 / 10:24
0

Um shortcode não tem nada a ver com a abertura e o fechamento de tags! Um shortcode é uma maneira de executar uma função e gerar os resultados em conteúdo.

add_shortcode ('olá', myFunction); function myFunction () {return 'Olá mundo';}

Colocando o shortcode [olá] em sua postagem, o resultado será Hello World.

    
por Jim Maguire 07.08.2016 / 05:46