Estou tentando configurar uma estrutura de tipo de postagem personalizada em vários níveis com links permanentes que parecem authors/books/chapters
com autores, livros e capítulos configurados como seu próprio tipo de postagem personalizada. Por exemplo, um URL típico neste site pode parecerexample.com/authors/stephen-king/the-shining/chapter-3/
Cada capítulo pode pertencer apenas a um livro e cada livro pode pertencer apenas a um autor. Considerei usar taxonomias em vez de CPTs para autores e livros, mas preciso associar metadados a cada item e prefiro a interface de postagem para isso.
Estou na maior parte do caminho, simplesmente configurando cada postagem personalizada como filho de uma entrada no CPT de um nível acima. Por exemplo, eu crio o "Capítulo 3" e atribuo "O Iluminado" como pai usando uma caixa de meta personalizada. "The Shining", por sua vez, tem "Stephen King" como pai. Não tive problemas para criar esses relacionamentos.
Estou usando tags de reescrita nas lesmas do CPT e os permalinks querem funcionar, mas eles não estão certos. Usando um analisador de reescrita, posso ver que as regras de reescrita são realmente geradas, mas elas não parecem estar na ordem correta e, portanto, outras regras são processadas primeiro.
Veja como eu registrei meus CPTs:
function cpt_init() {
$labels = array(
'name' => 'Authors'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author',
'with_front' => FALSE,
),
'with_front' => false,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('authors',$args);
$labels = array(
'name' => 'Books'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author/%authors%',
'with_front' => FALSE,
),
'with_front' => false,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('books',$args);
$labels = array(
'name' => 'Chapters'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author/%authors%/%books%',
'with_front' => FALSE,
),
'with_front' => FALSE,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('chapters',$args);
}
add_action( 'init', 'cpt_init' );
Existe alguma maneira de alterar a prioridade das minhas regras de reescrita para que autores, livros e capítulos sejam correspondidos primeiro?
Eu também sei que vou ter que adicionar um post_type_link
filtro, mas isso parece secundário para obter os permalinks corretamente em primeiro lugar. Se alguém souber onde posso encontrar uma visão abrangente de como esse filtro funciona, isso seria apreciado.