No WordPress, os URLs não são mapeados para rotas. Eles mapeiam para consultas de banco de dados.
Ao usar o WordPress no modo de links permanentes "padrão", você tem um conjunto de variáveis na consulta principal do URL, como? P = 1 ou? Page = 234 e assim por diante. Há também? S = search e muitos outros.
Se você usar os permalinks "bonitos", será criado um grande conjunto de regras chamado "regras de reescrita" que mapeia diretamente vários padrões de URL para esse mesmo conjunto de parâmetros de URL. Assim, um URL como / 2014/04/12 / example seria mapeado para? Year = 2014 & month = 04 & day = 12 & postname = example ou similar. Portanto, o seguinte também se aplica a eles, após a conclusão desse mapeamento.
Essas variáveis estão basicamente controlando a instância principal da classe WP_Query. A classe WP_Query contém todas as informações que constroem a consulta ao banco de dados para obter as "postagens" do banco de dados. Os vários parâmetros passados para ele controlam que tipo de consulta é criada e quais dados são obtidos.
Veja, tudo o que pode ser exibido pelo WordPress é essencialmente um "post". Um blog é uma série de postagens em ordem inversa com base no tempo. Uma "página" é uma postagem estática com um nome definido. Um "tipo de postagem personalizado" é exatamente o que parece, uma "postagem" com um tipo personalizado que você define. Todas as principais consultas para exibir qualquer coisa no WordPress estão recebendo algum subconjunto de postagens da tabela wp_posts.
O WP_Query é o que faz isso. E os parâmetros do URL são enviados diretamente para a consulta principal e usados lá.
O tema então determina qual modelo usar com base no retorno da consulta. Se você solicitou / category / example, isso se torna? Category_name = example, o que significa que a matriz principal $ wp_query-> query_vars obterá essas informações e o WP_Query retirará as últimas postagens X para a categoria "example" e definirá seu sinalizador is_category como true.
O template-loader será executado depois disso, veja que is_category () retorna true e decide escolher o modelo de categoria, para procurar por category-example.php e voltar para category.php e assim por diante, de acordo com o Template Hierarquia.
Portanto, a pergunta se você deseja alterar o funcionamento dos URLs é simples: deseja alterar os URLs ou para o que eles são mapeados? Como os URLs não são mapeados para funções, eles são mapeados para parâmetros que controlam a consulta. Se você deseja que o URL ajuste essa consulta principal, é um processo um pouco diferente do que se você deseja que um URL especial execute algum outro código especial.
E para responder sua pergunta específica nos comentários: "não há casos em que você realmente não deseja exibir postagens?" Não, não há. Tudo é um post. Todo o conteúdo é armazenado em postagens. Se você deseja armazenar conteúdo em outro lugar e ser diferente, pode fazer isso, mas é mais difícil porque, honestamente, geralmente não é necessário. Se você tiver conteúdo especial, crie um tipo de postagem personalizado, armazene seu conteúdo como uma postagem com esse tipo, mapeie um padrão de URL para ele. Fácil.