Ajudar a escrever a regra de reescrita personalizada

Preciso de alguma ajuda para escrever uma regra de reescrita personalizada para um tipo de postagem personalizado:

  • Supondo que o tipo de postagem personalizado seja “cpt”
  • Cada tipo de postagem personalizado é parte de uma taxonomia personalizada que é hierárquica, e os slugs são alfanuméricos.
  • Cada nome de postagem personalizado é alfanumérico MAS termina com um título de sublinhado seguido de uma string numérica (ex: post-name_145)
  • os resultados podem ser paginados

Os resultados esperados são os seguintes:

  • website.com/cpt/category => cpt_taxonomy = categoria
  • website.com/cpt/category/subcategory => cpt_taxonomy = subcategoria
  • website.com/cpt/category/subcategory/page/2 => cpt_taxonomy = subcategoria e paged = 2
  • website.com/cpt/category/subcategory/title_123 => cpt_taxonomy = subcategoria & cpt = title_123

Então eu tentei escrever a seguinte regra de reescrita, mas não está funcionando:

add_rewrite_rule( 'cpt/(.+?)(?:/([^/]_[0-9]+))(?:/([0-9]+))?/?$', 'index.php?cpt_taxonomy=$matches[1]&cpt=$matches[2]&paged=$matches[3]', 'top' ); 

Como um resultado,

  • website.com/cpt/category/subcategory

  • website.com/cpt/category/subcategory/title_123

ambos estão levando a um 404 para que a regex não seja válida.

Nesse caso :

  • website.com/cpt/category/subcategory/title_123

Eu tenho o seguinte resultado: cpt = title_12 & post_type = cpt & name = test-title_12 & cpt_taxonomy = category

Então, está tomando a categoria em vez da subcategoria como cpt_taxonomy

Para o segundo exemplo não operacional 404 está me dando informações falsas, pois é redirecionado para outra URL.

Eu acho que a regra de reescrita deve ser dividida em 2 partes:

se url terminar por sublinhado e números

 add_rewrite_rule( 'cpt/??? working on this ???', 'index.php?cpt=$matches[2]', 'top' ); 

se url não terminar por sublinhado e números

 add_rewrite_rule( 'cpt/ ??? working on this ???', 'index.php?cpt_taxonomy=$matches[1]&paged=$matches[2]', 'top' ); 

Então estou agora preso em encontrar a boa regex para combinar minhas regras

A regex que estou tentando construir não está longe desta:

 'cpt/(.+?)/?$' 

Exceto que falta o deve conter e não deve conter partes: /

Solutions Collecting From Web of "Ajudar a escrever a regra de reescrita personalizada"