Estoy tratando de configurar una estructura de tipo de publicación personalizada de varios niveles con enlaces permanentes parecidos authors/books/chapters
, con autores, libros y capítulos configurados como su propio tipo de publicación personalizada. Por ejemplo, una URL típica en este sitio podría verse asíexample.com/authors/stephen-king/the-shining/chapter-3/
Cada capítulo solo puede pertenecer a un libro, y cada libro solo puede pertenecer a un autor. He considerado utilizar taxonomías en lugar de CPT para autores y libros, pero necesito asociar metadatos con cada elemento y prefiero la interfaz de publicación para esto.
Llegué a la mayor parte del camino simplemente configurando cada publicación personalizada como elemento secundario de una entrada en el nivel superior de CPT. Por ejemplo, creo el "Capítulo 3" y asigno "The Shining" como padre utilizando un meta-cuadro personalizado. "The Shining" a su vez tiene a "Stephen King" como padre. No he tenido ningún problema para crear estas relaciones.
Estoy usando etiquetas de reescritura en las fichas de CPT y los enlaces permanentes quieren funcionar, pero no son del todo correctos. Utilizando un analizador de reescritura, puedo ver que las reglas de reescritura se generan realmente, pero no parecen estar en el orden correcto, por lo que otras reglas se procesan primero.
Así es como he registrado mis CPT:
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' );
Entonces, ¿hay alguna manera de cambiar la prioridad de mis reglas de reescritura para que los autores, los libros y los capítulos coincidan primero?
También sé que voy a tener que agregar un post_type_link
filtro, pero eso parece secundario para obtener los enlaces permanentes en primer lugar. Si alguien sabe dónde puedo encontrar una descripción completa de cómo funciona ese filtro, se lo agradecería.