Ich versuche, eine mehrstufige benutzerdefinierte Posttypstruktur mit Permalinks einzurichten, die so aussehen authors/books/chapters
, dass Autoren, Bücher und Kapitel als eigene benutzerdefinierte Posttypen eingerichtet sind. Beispielsweise könnte eine typische URL auf dieser Site so aussehenexample.com/authors/stephen-king/the-shining/chapter-3/
Jedes Kapitel kann nur zu einem Buch gehören, und jedes Buch kann nur einem Autor gehören. Ich habe überlegt, Taxonomien anstelle von CPTs für Autoren und Bücher zu verwenden, aber ich muss jedem Element Metadaten zuordnen, und ich bevorzuge hierfür die Post-Oberfläche.
Ich bin meistens auf dem Weg dorthin, indem ich einfach jeden benutzerdefinierten Beitrag als untergeordnetes Element eines Eintrags im CPT eine Ebene höher einrichte. Zum Beispiel erstelle ich "Kapitel 3" und weise "The Shining" als übergeordnetes Element mithilfe einer benutzerdefinierten Meta-Box zu. "The Shining" wiederum hat "Stephen King" als Elternteil. Ich hatte keine Probleme, diese Beziehungen aufzubauen.
Ich verwende Rewrite-Tags in den CPT-Slugs und die Permalinks möchten funktionieren, aber sie sind nicht ganz richtig. Mit einem Re-Write-Analysator kann ich sehen, dass die Rewrite-Regeln tatsächlich generiert werden, aber sie scheinen nicht in der richtigen Reihenfolge zu sein, sodass andere Regeln zuerst verarbeitet werden.
So habe ich meine CPTs registriert:
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' );
Gibt es also eine Möglichkeit, die Priorität meiner Umschreiberegeln so zu ändern, dass Autoren, Bücher und Kapitel zuerst übereinstimmen?
Ich weiß auch, dass ich einen post_type_link
Filter hinzufügen muss , aber das scheint zweitrangig zu sein, wenn man die Permalinks überhaupt richtig macht. Wenn jemand weiß, wo ich einen umfassenden Überblick über die Funktionsweise dieses Filters finden kann, wäre er dankbar.