WordPress retorna 404 no conflito de regra de reescrita personalizado em parâmetros

Eu segui os passos na resposta aqui e isso fez maravilhas.

Mas meu problema é nesta parte,

no original:

add_filter('rewrite_rules_array', 'mmp_rewrite_rules'); function mmp_rewrite_rules($rules) { $newRules = array(); $newRules['custom-post-type-base/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment $newRules['custom-post-type-base/(.+)/?$'] = 'index.php?taxonomy_name=$matches[1]'; return array_merge($newRules, $rules); } 

minha versão:

 add_filter('rewrite_rules_array', 'mmp_rewrite_rules'); function mmp_rewrite_rules($rules) { $newRules = array(); $newRules['custom-post-type-base/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type=$matches[3]'; $newRules['custom-post-type-base/(.+)/?$'] = 'index.php?custom_taxonomy=$matches[1]'; return array_merge($newRules, $rules); } 

Como minha taxonomia tem dois níveis, não pode reconhecer se o 2º param ( custom-post-type-base/(.+)/[here]/ ) é uma postagem personalizada ou uma taxonomia personalizada .. ele retorna corretamente no costume taxonomia, mas retorna 404 em um tipo de postagem personalizado, com o tipo de publicação sendo categorizado na taxonomia dos pais.

Veja exemplos de URLs:

 "/custom-post-type-base/taxonomy-parent/taxonomy-child/single-custom-post-type/" /*works as single custom post*/ "/custom-post-type-base/taxonomy-parent/taxonomy-child/" /*works as custom taxonomy page*/ "/custom-post-type-base/taxonomy-parent/" /*works as custom taxonomy page too*/ "/custom-post-type-base/taxonomy-parent/single-custom-post-type/" /*returns a 404*/ 

Solutions Collecting From Web of "WordPress retorna 404 no conflito de regra de reescrita personalizado em parâmetros"

Você tem:

  • Uma regra de reescrita que lida com o post na 5ª parte
  • Uma regra de reescrita para lidar com a parte de taxonomia

Uma regra de reescrita para lidar com a postagem na segunda ou terceira parte não está na lista acima, portanto, por que você obtém um 404.

Se tomarmos esta regra rewrite:

 $newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment 

E modifique-o ligeiramente com algum senso comum, a saber:

  • ponto de base / (. +) / (. +) / (. +) / (. +) /? $ ….

    custom_post_type_name = $ matches [ 4 ]

    // minha estrutura personalizada sempre terá o nome da postagem como o 5º segmento uri

  • basename / (. +) / (. +) / (. +) /? $ ….

    custom_post_type_name = $ matches [ 3 ]

    // minha estrutura personalizada sempre terá o nome da publicação como o 4º segmento uri

  • nome do arquivo / (. +) / (. +) /? $ ….

    custom_post_type_name = $ matches [ 2 ]

    // minha estrutura personalizada sempre terá o nome da postagem como o segmento uri

etc.

Coloque estes em ordem ascendente antes da sua regra existente e repita tantas vezes quanto for necessário