Estou tentando add_rewrite_rule
trabalhar para extrair um parâmetro do URL e passá-lo para a solicitação. Visto várias postagens sobre isso, mas não consigo fazê-lo funcionar.
Se um URL começar com uma determinada string, gostaria de removê-lo e transmiti-lo como um parâmetro de consulta.
URL de solicitação de exemplo:
http://domain.com/foo/my_page
Isso seria transformado em
http://domain.com/my_page?param=foo
Se 'foo' não estiver presente, ele deve passar como uma solicitação normal. Essa lógica deve se aplicar a qualquer URL da página ou tipo personalizado de postagem no meu site (basicamente foo / *). Pensando que funcionaria como uma passagem, se o URL tiver 'foo', retire-o e depois passe-o para o Wordpress para a coisa normal.
Eu já tenho 'param' como um query_vars permitido.
No total, seria necessário trabalhar para o seguinte:
- / foo / minha_página (página)
- / foo / minha_pasta / minha_página (subpágina)
- / foo / example_type (arquivo de postagem personalizado)
- / foo / example_type / example_post (postagem individual personalizada)
fonte
page
tipo de postagem ou qualquer página? e as páginas pai / filho na hierarquia?Respostas:
Uma regra básica que funcionaria para o seu exemplo:
Isso pega o que vem depois
foo/
e define isso comopagename
para a consulta e, em seguida,param
obtém o valor estáticofoo
. Se você precisar de diferentes padrões de URL, precisará de regras extras para cada padrão exclusivo. Consulte osWP_Query
documentos para os vários vars de consulta que podem ser definidos dentro das regras de reescrita. Não se esqueça de liberar regras de reescrita depois de adicionar novas. Isso pode ser feito visitando a página Configurações de links permanentes.Agora, visite seu URL de exemplo:
carregará a página correta, mas não se comportará exatamente como visitar:
porque ao usar reescritas internas,
param
é definido no$wp_query
objeto de consulta, não na$_GET
superglobal. Se você precisar trabalhar com o código que procura um valor$_GET
, precisará de uma etapa extra para definir esse valor:Outro método a considerar é o uso de pontos de extremidade, portanto,
/foo/
seria no final dos URLs, e não como um prefixo. A vantagem disso é que a APIadd_rewrite_endpoint
simplifica a adição de todas as regras necessárias, incluindo a ativação da paginação.fonte
Ok, recebi exemplos de trabalho para todos os três tipos de solicitações. Foram necessárias muitas experiências e brincadeiras para fazê-los funcionar. Eu acho que Milo é bom em convencer as pessoas a responderem suas próprias perguntas.
Após inúmeras alterações e atualizando os permalinks, percebi que era muito mais fácil descobrir os URLs fora do add_rewrite_url e, depois que eles funcionavam, definia a reescrita. Exemplo sendo
index.php?param=foo&post_type=example_type
.Outra coisa óbvia, mas adicioná-lo aqui para que possa ajudar outra pessoa. Você deve definir as regras customizadas do tipo de postagem add_rewrite_rule ANTES de definir suas regras de curinga de página / subpágina. Eu perdi bastante tempo com isso e acho que é a principal coisa que estava me fazendo não entender por que as regras não funcionaram.
Aqui estão as três regras que funcionam em todas as minhas necessidades. A regra Página / Subpágina foi combinada em uma única.
Além disso, o que fiz foi configurar um loop para adicionar várias regras de tipo de postagem personalizadas. Lembre-se de que você deve definir as regras personalizadas do tipo de postagem add_rewrite_rule ANTES de definir suas regras de curinga de página / subpágina.
O Rewrite Analyzer, que Milo repassou, foi bastante útil ao tentar entender melhor como o Wordpress consulta páginas / posts.
fonte