URL bonito com add_query_var

4

Estou tentando adicionar um "post secundário" a cada postagem no meu site, por exemplo

site.com/product-one/changelog site.com/product-two/changelog site.com/product-three/changelog

Este é o código que estou usando atm, que encontrei aqui em algum lugar:

global $wp,$wp_rewrite;
$wp->add_query_var('sub-page');
$wp_rewrite->add_rule('([^/]+)/(changelog)','index.php?pagename=$matches[1]&sub-page=$matches[2]', 'top');
$wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation

Isso funciona bem se eu navegar para o site.com/product-one?sub-page=changelog, mas se eu for para o site.com/product-one/changelog eu só serei redirecionado para o site.com/product-one

Por isso, desativei o redirecionamento canônico como um teste usando:

remove_filter('template_redirect', 'redirect_canonical'); 

site.com/product-one/changelog então não redireciona, mas retorna um 404 e o site.com/product-one?sub-page=changelog ainda funciona.

Há algo que eu possa mudar com minha reescrita para que isso funcione?

Nota: Eu sei que poderia fazer isso facilmente com tipos de postagem personalizados e comecei a percorrer esse caminho, mas como o site já está usando a estrutura% postname% permalink, eu não conseguiria ter o personalizado post tipo tem essa estrutura, bem como as páginas dos sites.

    
por Adam Dempsey 22.10.2011 / 16:47

1 resposta

6
add_rewrite_endpoint( 'changelog', EP_ROOT ); 

Adicionará o endpoint, changelog , que você poderá verificar no template_redirect hook.

Na correspondência, a matriz de variáveis de consulta ( $wp_query->query ) deve conter a chave changelog contendo o que vier depois do valor / in. Portanto, para a URL example.com/product1/changelog/5 você teria uma variável de consulta chamada changelog com o valor 5 .

Se não houver nada após o endpoint, a variável estará presente, mas conterá uma string vazia. Observe que get_query_var() não funcionará para tal uso, uma vez que é codificado para retornar uma string vazia se a consulta var não estiver definida.

Pode ser o suficiente simplesmente verificar se uma variável está presente e, em caso afirmativo, modificar as variáveis de consulta nos ganchos de consulta (como pre_get_posts ) e carregar seu próprio subpós com o modelo de log de alterações.

Você também pode experimentar diferentes máscaras de ponto final de permalink, por exemplo, EP_PAGES

Referências:

por Tom J Nowell 26.10.2011 / 00:31