Várias taxonomias no URL
Como anexar várias taxonomias à URL, com o seguinte:
- Tipo de postagem: produtos
- Taxonomia: product_type
- Taxonomia: product_brand
Adicionando novo produto e selecionando o tipo e a marca para este produto:
Ao adicionar um novo produto , há duas caixas de taxonomia (product_type e product_brand). Vamos chamar esse novo post Produto de Teste 1 . A primeira coisa que queremos fazer é marcar com que tipo de produto estou lidando, digamos, telefones celulares . Em seguida, quero marcar a que marca o produto pertence, digamos samsung.
Agora, o " Produto de teste 1 " está associado ao tipo "telefones celulares" e à marca "samsung" .
O resultado final desejado é:
/ produtos
»Ver todas as postagens personalizadas/ products / cell-phones
»Veja todas as postagens personalizadas com os celulares de taxonomia/ product / cell-phones / samsung /
»Veja todas as postagens personalizadas nas quais a taxonomia é de celulares AND samsung/ products / telefones celulares / samsung / test-product-1
»Veja o produto (postagem personalizada única)
A questão
Como alguém tornaria isso possível? Meu pensamento inicial era usar uma taxonomia, tendo "telefones celulares" como o termo pai de "samsung" . Na verdade, acrescentar a taxonomia e seus termos não foi tão difícil. Mas isso levou a muitas outras questões, algumas bem conhecidas, outras nem tanto. De qualquer forma, não funciona assim, pois gera 404 problemas e o WP não permite certas coisas.
WP.org »taxonomia-arquivo-modelo
Isso me levou a repensar a estrutura, a deixar as taxonomias e seus termos e pensei; por que não criar uma segunda taxonomia e associar o tipo de postagem a ele e anexá-lo ao URL?
Boa pergunta, de fato, mas como?
Respostas:
Isso é certamente possível utilizando algumas regras de reescrita próprias até certo ponto. A API WP_Rewrite expõe funções que permitem adicionar regras de reescrita (ou 'mapas') para converter uma solicitação em uma consulta.
Existem pré-requisitos para escrever boas regras de reescrita, e o mais importante é a compreensão básica de expressões regulares. O mecanismo de reescrita do WordPress usa expressões regulares para converter partes de um URL em consultas para obter postagens.
Este é um tutorial curto e bom sobre PHP PCRE (expressões regulares compatíveis com Perl).
Então, você adicionou duas taxonomias, vamos assumir que seus nomes são:
Podemos usá-los em consultas como:
A consulta seria
?product_type=cell-phones&product_brand=samsung
. Se você digitar isso como sua consulta, receberá uma lista de telefones Samsung. Para reescrever/cell-phones/samsung
nessa consulta, uma regra de reescrita deve ser adicionada.add_rewrite_rule()
fará isso por você. Aqui está um exemplo da aparência da sua regra de reescrita no caso acima:Você precisará
flush_rewrite_rules()
assim que adicionar a regra de reescrita para salvá-la no banco de dados. Isso é feito apenas uma vez, não há necessidade de fazer isso com cada solicitação, uma vez que uma regra é liberada. Para removê-lo, basta descarregar sem a regra de reescrita adicionada.Se você deseja adicionar paginação, pode fazê-lo fazendo algo como:
fonte
O resultado final
Isto é o que eu vim usando parcialmente pedaços de todas as respostas que tenho:
Alguns pensamentos:
Isso funciona. Embora você seja "obrigado" a atribuir ambas as taxonomias a cada postagem ou o URL terá um resultado à direita
'/'
»'/products/taxonomy//postname'
. Como vou atribuir ambas as taxonomias a todos os meus procedimentos, tendo um tipo e uma marca, esse código parece estar funcionando para minhas necessidades. Se alguém tiver alguma sugestão ou melhoria, sinta-se à vontade para responder!fonte
flush_rewrite_rules()
eminit
? não faça isso. basicamente, você está redefinindo suas regras de reescrita a cada carregamento de página.Verifique desta forma, ainda há alguns bugs no arquivo da marca
http://pastebin.com/t8SxbDJy
}
fonte
Embora não seja sua estrutura exata de URL desejada, você pode obter:
sem precisar especificar regras personalizadas de reescrita.
No entanto, é necessário registrar suas taxonomias e tipos de postagem personalizados em uma ordem específica. O truque é registrar qualquer taxonomia em que a lesma comece com a lesma do seu tipo de postagem antes de registrar esse tipo de postagem personalizado. Por exemplo, assuma as seguintes lesmas:
Então você pode registrá-los nesta ordem:
Se você absolutamente precisa ter um URL como:
Então você exigiria uma regra de reescrita mais ou menos assim:
UPDATE /programming/3861291/multiple-custom-permalink-structures-in-wordpress
Veja como redefinir corretamente o URL de postagem única.
Defina a reescrita como false para o tipo de postagem personalizada. (Deixe o arquivo como está) e, depois de registrar as taxonomias e postagens, também registre as seguintes regras de reescrita.
Em seguida, filtre post_type_link para criar a estrutura de URL desejada - permitindo valores de taxonomia não definidos. Alterando o código da postagem vinculada, você teria:
Agora, só preciso descobrir como reescrever o URL da taxonomia da marca sem a tag da marca líder e devo corresponder exatamente ao URL desejado.
fonte