J'essaie de mettre en place une structure de type de publication personnalisée à plusieurs niveaux avec des permaliens qui ressemblent authors/books/chapters
, avec des auteurs, des livres et des chapitres tous configurés comme leur propre type de publication personnalisé. Par exemple, une URL typique sur ce site pourrait ressembler àexample.com/authors/stephen-king/the-shining/chapter-3/
Chaque chapitre ne peut appartenir qu'à un seul livre, et chaque livre ne peut appartenir qu'à un seul auteur. J'ai envisagé d'utiliser des taxonomies au lieu des CPT pour les auteurs et les livres, mais je dois associer des métadonnées à chaque élément et je préfère l'interface de publication pour cela.
Je suis la plupart du chemin là-bas en configurant simplement chaque poste personnalisé en tant qu'enfant d'une entrée dans le CPT d'un niveau supérieur. Par exemple, je crée "Chapitre 3" et attribue "The Shining" comme parent à l'aide d'une méta-boîte personnalisée. "The Shining" a à son tour "Stephen King" comme parent. Je n'ai eu aucun mal à créer ces relations.
J'utilise des balises de réécriture dans les slugs CPT et les permaliens veulent fonctionner, mais ils ne sont pas tout à fait raison. En utilisant un analyseur de réécriture, je peux voir que les règles de réécriture sont réellement générées, mais elles ne semblent pas être dans le bon ordre et donc d'autres règles sont traitées en premier.
Voici comment j'ai enregistré mes 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' );
Existe-t-il un moyen de modifier la priorité de mes règles de réécriture afin que les auteurs, les livres et les chapitres soient tous mis en correspondance en premier?
Je sais également que je vais devoir ajouter un post_type_link
filtre, mais cela semble secondaire pour obtenir les permaliens correctement en premier lieu. Si quelqu'un sait où je peux trouver un aperçu complet du fonctionnement de ce filtre, ce serait apprécié.