No WordPress, os URLs não mapeiam para rotas. Eles mapeiam para consultas de banco de dados.
Ao usar o WordPress no modo permalinks "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ê usa os permalinks "bastante", um grande conjunto de regras chamado de "regras de regravação" é criado, o 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 / exemplo seria mapeado para? Ano = 2014 & mês = 04 & dia = 12 & pós-nome = exemplo ou similar. Então o seguinte também se aplica a estes, depois que este mapeamento é feito.
Essas variáveis estão essencialmente controlando a instância principal da classe WP_Query. A classe WP_Query contém todas as informações que criam a consulta do banco de dados para obter as "postagens" do banco de dados. Os vários parâmetros passados controlam o tipo de consulta que ele cria e os dados que obtém.
Veja, tudo o que pode ser exibido pelo WordPress é essencialmente um "post". Um blog é uma série de postagens em ordem reversa baseada em 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 da URL são enviados diretamente para essa consulta principal e usados lá.
O tema determina qual modelo usar com base no que a consulta retorna. Se você solicitou / category / example, então isso se torna? Category_name = example, o que significa que o array $ wp_query- > query_vars principal obterá essas informações, e o WP_Query irá extrair as últimas X postagens para a categoria "example", e ele irá definir seu sinalizador is_category como true.
O template-loader será executado depois disso, veja que is_category () retorna true, e decide escolher o template de categoria, então ele irá procurar category-example.php e voltar para category.php e assim por diante, de acordo para a hierarquia de modelos.
Então, a pergunta se você quer mudar a forma como os URLs funcionam é simples: você quer mudar os URLs, ou para o que eles estão mapeados? Como as URLs não são mapeadas para funções, elas são mapeadas para parâmetros que controlam a consulta. Se você quiser que o URL ajuste essa consulta principal, então é um processo um pouco diferente do que se você quiser que um URL especial execute algum outro código especial totalmente diferente.
E para responder à sua pergunta específica nos comentários: "não há casos em que você não queira realmente exibir postagens?" Não, não há. Tudo é um post. Todo o conteúdo é armazenado em posts. Se você quiser armazenar conteúdo em outro lugar e ser diferente, então você pode fazer isso, mas é mais difícil porque, honestamente, não é normalmente necessário. Se você tiver conteúdo especial, crie um tipo de postagem personalizado, armazene seu conteúdo como um post com esse tipo, mapeie um padrão de URL para ele. Fácil.