Como funciona o roteamento no wordpress?


13

Como o roteamento do núcleo wp funciona? Estou tendo dificuldade para entender ... No MVC, seu URL se parece com mycontroller / myaction que mapeia para MyController-> myaction ()

No drupal, é index.php? Q = mycustomerpath / hello, que pode ser mapeado para qualquer função que você goste, retornando um conteúdo "com tema" para o layout do tema.

Mas no wp, não tenho idéia de como as coisas são feitas ... é? P = 1 e depois? Product = 1 ... procurei a documentação do fluxo de roteamento, mas não consigo encontrar nenhuma (o Google retorna apenas artigos personalizados rotas). Quero entender primeiro os fundamentos do roteamento principal.


digitando o código, vejo em cada solicitação que chama query_posts? por que diabos ele precisa consultar as postagens de cada vez? Não existem casos em que você realmente não deseja exibir postagens?
yeahman

1
O conteúdo é salvo como postagem no WP. Então, quando você precisa mostrar o conteúdo que você precisa para consultá-lo
Sisir

Posso sugerir que você leia sobre "o loop", que é o conceito que você precisa entender para saber como o WordPress funciona. Essencial "the loop" exibe uma matriz de postagens que é o resultado de query_posts. Para solicitações de URL não administrativas, o WP foi projetado para mostrar apenas postagens e é necessária uma programação personalizada para mostrar algo além de uma postagem. As solicitações de URL do administrador são diferentes e elas não usam "o loop" e mostram coisas que não são postadas.

ok, mas esta abordagem é um pouco estranho e não muito flexível tbh
yeahman

digamos que quero exibir um formulário de contato .. preciso colocar meu html em um tipo de conteúdo da página? Eu ainda estou tentando encontrar onde colocar a lógica para o envio do formulário ... (no page.php tema abordagem muito feio?)
yeahman

Respostas:


20

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.


Entendo que tudo deve ser representado em uma postagem (por meio de tipos personalizados de postagens etc.) muito semelhante aos tipos personalizados no drupal 6 ... mas isso afeta o desempenho de ter uma única tabela de postagens para armazenar todo o conteúdo do site? O drupal 7 resolveu o problema introduzindo o tipo de entidade para que você não precise criar um tipo personalizado e armazenar tudo na tabela de nós, mas na sua própria tabela de entidades, que ainda pode aproveitar a estrutura do drupal. Espero que o wordpress introduza essa abordagem no futuro. thx para a explicação detalhada.
yeahman

Eu acho que se eu quiser mapear um URL para uma função / tema próprio, o roteador wp ajudaria?
yeahman

Adicionar um sistema de roteamento completo geralmente não é necessário. Existem maneiras mais simples. A base do WordPress é exibir o conteúdo gerado pelo usuário, que é todo armazenado na tabela de postagens. Se você deseja exibir conteúdo que não é gerado pelo usuário, geralmente o faz no tema ou em um plug-in. Existem centenas (milhares) de ganchos e filtros de ação e outras maneiras de o código substituir várias partes do processo à medida que a página é gerada. E com coisas como códigos de acesso, a inserção de html personalizado no conteúdo é relativamente fácil.
Otto

como faço para adicionar html / php personalizado a um tipo de post que criei? sem ter a modificar single.php do tema ou criar um single-mycustompost.php (não é uma abordagem muito portátil)
yeahman

6
depois de mais de um ano trabalhando com o wordpress agora ... Eu ainda não estou convencido por isso ... o quadro não é elegante e muito feio ... Funciona como um blog simples, mas se você deseja desenvolver outros tipos de sites. é uma espécie de hackear o wordpress para fazer algo que não foi feito.
yeahman 7/11/2015
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.