Sto cercando di impostare una struttura di tipo di post personalizzato multilivello con permalink che sembrano authors/books/chapters
, con autori, libri e capitoli tutti impostati come il proprio tipo di post personalizzato. Ad esempio, potrebbe apparire un tipico URL su questo sitoexample.com/authors/stephen-king/the-shining/chapter-3/
Ogni capitolo può appartenere a un solo libro e ogni libro può appartenere a un solo autore. Ho preso in considerazione l'utilizzo di tassonomie anziché CPT per autori e libri, ma devo associare metadati a ciascun elemento e preferisco l'interfaccia post per questo.
Sono quasi arrivato semplicemente impostando ogni post personalizzato come figlio di una voce nel CPT di un livello superiore. Ad esempio, creo "Chapter 3" e assegno "The Shining" come genitore usando una meta-box personalizzata. "The Shining" a sua volta ha "Stephen King" come genitore. Non ho avuto problemi a creare queste relazioni.
Sto usando i tag di riscrittura nelle lumache CPT e i permalink vogliono funzionare, ma non sono del tutto giusti. Usando un analizzatore di riscrittura, posso vedere che le regole di riscrittura sono effettivamente generate, ma non sembrano essere nel giusto ordine e quindi altre regole vengono elaborate per prime.
Ecco come ho registrato i miei 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' );
Quindi c'è un modo per cambiare la priorità delle mie regole di riscrittura in modo che autori, libri e capitoli vengano tutti abbinati per primi?
So anche che dovrò aggiungere un post_type_link
filtro, ma questo sembra secondario per ottenere i permalink in primo luogo. Se qualcuno sa dove posso trovare una panoramica completa di come funziona quel filtro, sarebbe apprezzato.