URL Reescrever + Página + Tipo de postagem personalizado = Redirecionamento incomum

Mais um problema de reescrita de URL 🙂

O problema

Eu tenho uma regra de reescrita de URL que deve funcionar, mas contra toda lógica redireciona sem passar pela var. Consulta.

The Juicy Detalhes

O site possui uma estrutura de página configurada assim:

/ nossa empresa / acionistas

e eu tenho um tipo de postagem personalizado chamado ” acionista “. Meu objective é que a estrutura funcione como esta:

/ nossa-empresa / acionistas / excelente nome-acionista

… e para a página de Acionistas fazer uma consulta personalizada para as postagens do Acionista. Normalmente, eu usaria a slut de reescrita para as postagens do Acionista, mas eu quero que o conteúdo seja mostrado no contexto da estrutura original da página ( nossa empresa / acionistas ).

Para conseguir isso, adicionei esse código em functions.php (e depois fui para Permalinks e salvo para atualizar as regras):

add_action( 'init', 'my_custom_rewrites' ); function my_custom_rewrites(){ add_rewrite_rule( 'our-firm/shareholders/([^/]+)/?', 'index.php?pagename=shareholders&shareholder_name=$matches[1]', 'top' ); } add_filter( 'query_vars', 'my_custom_query_vars' ); function my_custom_query_vars( $query_vars ){ $query_vars[] = 'shareholder_name'; return $query_vars; } 

Tudo o que está no lugar, se eu for / our-firm / shares / awesome-shareholder name , redireciona-me para a página de Acionistas sem passar pela consulta var e, de fato, muda o URL para / our-firm / shares / . A parte estranha é se eu mudar o pagename de redirecionamento para qualquer outra coisa, ele funciona e sem esforço passa a consulta var junto.

Para testá-lo mais, usei o acessível plugin do Rewrite Analyzer e obtive isso:

Tela do teste do Rewrite Analyzer

Notas Adicionais

  • Estou executando o WP 3.2.1 , testando localmente e não manipulando o access .htaccess

  • O modelo da Minha Página de Acionistas não está fazendo nada de incomum, mas deixe-me saber se você precisa vê-lo

  • O WordPress leva em consideração o label de um tipo de postagem personalizado ao descobrir URLs? O label plural de “acionista” é, naturalmente, “Acionistas”.

  • Estou adicionando o CPT do “acionista” através do plugin de UI do Custom Post Type . Eu posso adicioná-lo manualmente com o código se alguém achar que iria ajudar. Estas são as configurações do CPT:

    rewrite = true, slug = ‘shareholder’, with_front = true, query var = true e hierarchical = true.

  • Eu anteriormente tinha o ID do tipo de posto “acionista” como “acionistas”, então rapidamente percebi que isso causaria problemas com o mesmo nome que a página na qual eu estava tentando redirect. Em seguida, alterei o tipo de postagem para “acionista”, que infelizmente não resolveu o problema. O fato de que um deles era um tipo de publicação de “acionistas” afetaria isso? Talvez haja um cachê mágico secreto em algum lugar que eu possa limpar …

  • Eu sei que existem pelo menos 5 postagens WP URL reescrevem posts na web, mas não consigo encontrar uma que pertença à minha questão específica. Desculpe se perdi uma 🙂

Estou no fim da minha inteligência – eu sei que isso deve funcionar, mas não. Espero que eu tenha perdido algo dolorosamente óbvio e é uma solução fácil. Por favor, deixe-me saber se posso fornecer mais detalhes / código / etc.

Qualquer ajuda será apreciada, obrigado!

Solutions Collecting From Web of "URL Reescrever + Página + Tipo de postagem personalizado = Redirecionamento incomum"

Você deve tentar definir “slug” (no parâmetro / opção “rewrite”) para “nossa empresa / acionistas”, assim como a estrutura que você configurou na function add_rewrite_rule ().

O primeiro parâmetro de add_rewrite_rule () e a configuração ‘rewrite’ do tipo de postagem personalizado devem ser iguais para que a reescrita realmente funcione.

Então, no caso de você escolher codificar o registro do tipo de postagem personalizado, seu register_post_type () deve ter algo assim :

 $args = array( 'rewrite' => array( 'our-firm/shareholders', 'with_front' => true ) ); register_post_type( 'shareholder', $args ); 

Claro que você precisa preencher a matriz $ args com algumas outras chaves. Acabei de especificar “rewrite” para manter a explicação simples. Siga a documentação sobre esta function para elaborar um registro apropriado: http://codex.wordpress.org/Function_Reference/register_post_type

Se as alterações não forem refletidas, tente limpar as regras de reescrita. Você pode realizar isso de forma segura clicando em “Salvar alterações” na página Admin> Configurações> Permalinks

Você tentou limpar suas regras de reescrita após add_rewrite_rule ():

 function my_custom_rewrites(){ add_rewrite_rule( 'our-firm/shareholders/([^/]+)/?', 'index.php?pagename=shareholders&shareholder_name=$matches[1]', 'top' ); flush_rewrite_rules(false); } 

Isso não é algo que você deixaria na produção, mas poderia determinar se essa regra está sendo adicionada às suas reescritas ou não. Você também pode confirmar depois:

 global $wp_rewrite; var_dump($wp_rewrite->rules); 

para ver se sua regra foi adicionada.

Eu estava tendo um problema muito parecido e ficou perplexo com o que o analisador de rewrite mostrou uma correspondência na minha regra de reescrita, mas a página estava fazendo um redirecionamento estranho. Uma vez que eu leio este artigo: http://www.dev4press.com/2012/tutorials/wordpress/practical/how-wordpress-url-rewriting-works/ Eu percebi que a publicação na qual eu estava tentando rewrite na minha regra de reescrita era uma página que é um “Custom Post Type” e, portanto, wordpress não suporta url reescrita para isso. O redirecionamento estranho é devido ao “Redirecionamento canônico” mencionado na parte inferior desse artigo. Eu tentei rewrite para um “post” não uma “página” e funcionou.

Da documentação

IMPORTANTE: por padrão, o WordPress não reconhece as variables ​​personalizadas da querystring usadas para reescritas. Você deve registrar suas variables ​​querystring com o WordPress. Basta usar add_rewrite_tag () para capturar os valores das variables ​​querystring após uma reescrita, ou a reescrita acima não funcionará!

Eu acredito que o WordPress não está reconhecendo o “nome do participante”

Você precisa fazer isso

 add_action( 'init', 'my_custom_rewrites' ); function my_custom_rewrites(){ add_rewrite_tag( '%shareholder_name%', '([^/]+)' ); add_rewrite_rule( 'our-firm/shareholders/([^/]+)/?', 'index.php?pagename=shareholders&shareholder_name=$matches[1]', 'top' ); } 

Tem certeza de que seu tipo de postagem personalizado possui um arquivo single.php separado?

Eu estava tendo um problema e esta era a situação: eu tenho três tipos de postagem personalizada. Recentemente, criei o novo e seu permalink redireciona-me para uma página de tipo de postagem personalizada. Eu tentei todas as regras de descarga de rewrite, etc, mas então percebi que o problema era porque eu não tenho um arquivo single.php separado para o meu novo tipo de postagem personalizado, resultando no meu novo tipo de publicação com um redirecionamento para uma publicação existente de tipo diferente por padrão.

Basta olhar para isso, talvez você tenha a mesma situação que a minha. Boa sorte!

Sinto falta de um comando flush (). E recebi a expressão (dolorosamente, ao longo de horas) de que é melhor ficar longe de custom_rewrite, pelo menos sob a palavra 3.1

Dê uma olhada na minha resposta para (bem, minha) pergunta aqui: flexível rewrite ‘ramble’ URLs com WordPress

Pode ser sua solução de 4 linhas em dois arquivos 🙂