Próbuję skonfigurować wielopoziomową niestandardową strukturę typu postu z permalinkami, które wyglądają tak authors/books/chapters
, że autorzy, książki i rozdziały są skonfigurowane jako własne niestandardowe typy postów. Na przykład może wyglądać typowy adres URL tej witrynyexample.com/authors/stephen-king/the-shining/chapter-3/
Każdy rozdział może należeć tylko do jednej książki, a każda książka może należeć tylko do jednego autora. Rozważyłem zastosowanie taksonomii zamiast CPT dla autorów i książek, ale muszę powiązać metadane z każdym elementem i wolę do tego interfejs postu.
Jestem w większości przypadków, po prostu konfigurując każdy niestandardowy post jako dziecko wpisu w CPT o jeden poziom wyżej. Na przykład tworzę „Rozdział 3” i przypisuję „Lśnienie” jako element nadrzędny za pomocą niestandardowego meta-boxa. Z kolei „Lśnienie” ma „Stephena Kinga” jako rodzica. Nie miałem żadnych problemów z tworzeniem tych relacji.
Używam tagów przepisywania w ślimakach CPT i permalinki chcą działać, ale nie są w porządku. Za pomocą analizatora ponownego zapisu widzę, że reguły przepisywania są w rzeczywistości generowane, ale wydaje się, że nie są w odpowiedniej kolejności, dlatego najpierw przetwarzane są inne reguły.
Oto jak zarejestrowałem moje 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' );
Czy jest więc jakiś sposób, aby zmienić priorytet moich reguł przepisywania, aby autorzy, książki i rozdziały były dopasowane najpierw?
Wiem też, że będę musiał dodać post_type_link
filtr, ale wydaje się to drugorzędne w stosunku do uzyskania permalinków w pierwszej kolejności. Jeśli ktoś wie, gdzie mogę znaleźć kompleksowy przegląd działania tego filtra, byłoby to mile widziane.