Quando o add_rewrite_tag () deve ser usado?

Passei alguns dias tentando aprender a melhorar as regras de reescrita. Até agora, meu entendimento é que uma maneira adequada de adicionar regras simples é usar add_rewrite_rules() , com grandes agradecimentos a Jan Fabry nesta troca, cujas elaborações têm sido de grande utilidade.

Embora ele mencione add_rewrite_tags() , não vi um guia sobre isso explicando quando é benéfico usá-lo, ao contrário de outras formas de adicionar regras de reescrita ou qualquer bom exemplo em seu uso. Parece ser uma ferramenta mais poderosa, mas isso é sobre tudo o que posso imaginar. Acho que os exemplos no Codex são muito crípticos ou incompletos . Alguém poderia elaborar sobre ele ou apontar para algum recurso? Não encontrei nada útil no Google.

editar: sua página do Codex fala sobre “geralmente” usando isso em conjunto com add_rewrite_rules() , mas não elabora. Da mesma forma, a página do Codex para add_rewrite_rules() refere-se a add_rewrite_tags() mas também é muito escasso na informação. Quando e como essa combinação seria usada? O único exemplo que encontrei é a resposta de Rob Vermeer, que não entendo.

Solutions Collecting From Web of "Quando o add_rewrite_tag () deve ser usado?"

A diferença fundamental é:

  • O add_rewrite_rule() adiciona uma determinada regra que é interpretada
  • O add_rewrite_tag() adiciona um espaço reservado para usar em estruturas de url. Esse espaço reservado é usado para gerar várias regras.

Por exemplo – suponha que você seja um agente de viagens anunciando hotéis em vários países. Você pode querer que o URL de um hotel seja como

  www.example.com/hotels/UK/Balmoral 

Onde o país (Reino Unido neste exemplo) é um termo de taxonomia personalizado e Balmoral é um hotel (tipo de publicação). Poderíamos adicionar regras de reescrita para isso, mas então teríamos que gerar uma regra para:

  • o próprio hotel
  • os anexos do hotel
  • Uma regra para hotéis (postagens) onde derrama várias páginas, etc.

Gerar essas regras pode tornar-se complicado. Além disso, provavelmente estaremos competindo com as próprias regras do WordPress para esse tipo de publicação – gerado a partir da estrutura que definimos ao registrar o tipo de publicação. (Em qualquer caso, deixe WordPress fazer o trabalho).

Esta ‘permaestrutura’ – semelhante ao que definiu para postagens nas configurações de permalink – determina as regras de reescrita que o WordPress gera. Mas, como queremos uma estrutura que contenha algum desconhecido (o país) – que queremos interpretar -, precisamos fornecer um espaço reservado da forma %country% . (É quase idêntico a %category% para postagens).

Por exemplo:

 add_action_init('init','wpse71305_register_types'); function wpse71305_register_types(){ //You'll need to register the country taxonomy here too. //Add 'country' tag. add_rewrite_tag('%country%', '([^&/]+)')); //Register hotel post type with %country$ tag $args = array( ... 'has_archive'=>true, 'rewrite' => array( 'slug'=>'hotels/%country%', 'with_front'=> false, 'feed'=> true, 'pages'=> true ) ... ); register_post_type('hotel',$args); } 

Nota: o WordPress não sabe como gerar o URL da tag %country% – você precisa dizer que faz isso. (Eu cobri-lo em um artigo que liguei abaixo).

Finalmente, o WordPress também armazenará o valor correspondente para que você possa recuperá-lo via get_query_var() (algo que você não faz com uma regra de reescrita padrão).

Você também pode criar tags para ser usado na estrutura de postagens (configurá-lo na página de configurações do Link).

Ao adicionar uma etiqueta, podemos usá-la em permastructures. WordPress então sabe

  • O que esperar
  • Como interpretar a url (verifique as correspondências)
  • Como interpretar o valor (ou seja, ‘UK’)

(Como referência, veja este artigo que escrevi: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ ).

Editar

Conforme observado nos comentários, o exemplo acima é um pobre como register_taxonomy() , de fato, chama add_rewrite_tag() .

Quanto à documentação do Codex sobre como usá-los “em combinação”: isso é talvez enganador, pois ambos podem ser usados ​​de forma independente. Conforme mencionado acima, no entanto, add_rewrite_tag() adiciona o nome da tag às “variables ​​de consulta” do WordPress. Na prática, isso permite que você obtenha o valor com get_query_var() . Assim, quando add_rewrite_rule() é usado com add_rewrite_tag() , a variável será armazenada pelo WordPress. Mas há outras maneiras de fazer isso (veja esta resposta – note também o comentário de Rob Vermeer).

Também relacionado: Como recuperar variables ​​$ _GET de URLs reescritas?