Tôi đang cố gắng thiết lập cấu trúc loại bài đăng tùy chỉnh đa cấp với các permalinks trông giống như authors/books/chapters
, với các tác giả, sách và chương đều được thiết lập làm loại bài đăng tùy chỉnh của riêng họ. Ví dụ: một URL điển hình trên trang web này có thể trông giống nhưexample.com/authors/stephen-king/the-shining/chapter-3/
Mỗi chương chỉ có thể thuộc về một cuốn sách và mỗi cuốn sách chỉ có thể thuộc về một tác giả. Tôi đã cân nhắc sử dụng các nguyên tắc phân loại thay vì CPT cho tác giả và sách, nhưng tôi cần liên kết siêu dữ liệu với từng mục và tôi thích giao diện bài đăng này.
Tôi hầu hết đều đi bằng cách đơn giản là thiết lập mỗi bài đăng tùy chỉnh như một phần tử con của một mục trong CPT một cấp. Ví dụ: tôi tạo "Chương 3" và gán "The Shining" làm cha mẹ bằng cách sử dụng hộp meta tùy chỉnh. "The Shining" lần lượt có "Stephen King" là cha mẹ. Tôi không gặp khó khăn gì khi tạo ra những mối quan hệ này.
Tôi đang sử dụng các thẻ viết lại trong sên CPT và permalinks muốn hoạt động, nhưng chúng không hoàn toàn đúng. Sử dụng một bộ phân tích viết lại, tôi có thể thấy rằng các quy tắc viết lại thực sự được tạo ra, nhưng chúng dường như không theo đúng thứ tự và vì vậy các quy tắc khác được xử lý trước.
Đây là cách tôi đã đăng ký CPT của mình:
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' );
Vì vậy, có cách nào để thay đổi mức độ ưu tiên của các quy tắc viết lại của tôi để các tác giả, sách và chương đều được khớp trước?
Tôi cũng biết rằng tôi sẽ phải thêm một post_type_link
bộ lọc, nhưng điều đó dường như là thứ yếu để có được permalinks ngay từ đầu. Nếu bất cứ ai biết nơi tôi có thể tìm thấy một tổng quan toàn diện về cách bộ lọc đó hoạt động, nó sẽ được đánh giá cao.