Я намагаюся створити багаторівневу структуру типу користувальницької пошти з постійними посиланнями, схожими на них authors/books/chapters
, з авторами, книгами та розділами, створеними як власний тип публікації. Наприклад, може виглядати типова URL-адреса на цьому веб-сайтіexample.com/authors/stephen-king/the-shining/chapter-3/
Кожна глава може належати лише одній книзі, а кожна книга може належати лише одному автору. Я розглядав можливість використання таксономій замість CPT для авторів і книг, але мені потрібно пов’язати метадані з кожним елементом, і для цього я віддаю перевагу інтерфейсу публікації.
Я більшу частину шляху там, просто налаштувавши кожну власну публікацію як дочірню запис в CPT на один рівень вище. Наприклад, я створюю "Главу 3" і призначаю "Сяючий" як батьків, використовуючи власну метаполе. "Сяючий" у свою чергу має "Стівена Кінга" як батька. У мене не було проблем із створенням цих відносин.
Я використовую теги для перезапису в CPT-слизах і постійні посилання хочуть працювати, але вони не зовсім вірні. Використовуючи аналізатор повторного запису, я бачу, що правила перезапису насправді генеруються, але вони, схоже, не в правильному порядку, тому інші правила обробляються спочатку.
Ось як я зареєстрував свої 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' );
То чи є спосіб змінити пріоритет моїх правил переписування, щоб усі автори, книги та глави були зіставлені першими?
Я також знаю, що мені доведеться додати post_type_link
фільтр, але це здається вторинним для отримання перманентних посилань в першу чергу. Якщо хтось знає, де я можу знайти повний огляд того, як працює цей фільтр, це буде вдячно.