Como o roteamento no wordpress funciona?

12

Como funciona o roteamento do core wp? Estou tendo dificuldade em entender ... No MVC, sua URL se parece com mycontroller / myaction que é mapeada para MyController- > myaction ()

No drupal, é index.php? q = mycustomerpath / hello que pode ser mapeado para qualquer função que você goste que retorne um conteúdo que seja "temático" no layout do seu tema.

Mas no wp, eu não tenho ideia de como as coisas são feitas ... é? p = 1 então? product = 1 ... Eu procurei por documentação do fluxo de roteamento mas não consegui encontrar nenhum (o google apenas retorna artigos em rotas personalizadas) .. eu quero entender os fundamentos do roteamento principal em primeiro lugar ..

    
por yeahman 12.04.2014 / 09:46

1 resposta

17

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.

    
por Otto 12.04.2014 / 12:08

Tags