Tôi đã tìm hiểu mọi câu hỏi ở đây trên permalinks loại bài đăng tùy chỉnh, nhưng dường như hầu hết đều là vấn đề với việc viết lại phân loại tùy chỉnh hoặc thiếu rõ ràng của flush_rewrite_rules (). Nhưng trong trường hợp của tôi, tôi chỉ sử dụng loại bài đăng tùy chỉnh (không phân loại), được đặt thành phân cấp (để tôi có thể gán mối quan hệ cha-con), với "hỗ trợ" thích hợp cho các thuộc tính metabox, v.v. Đã tuôn ra các quy tắc viết lại một ngàn cách khác nhau. Tôi đã thử các cấu trúc permalink khác nhau. Nhưng URL con luôn dẫn đến 404!
Ban đầu tôi có các loại bài đăng tùy chỉnh độc lập cho các yếu tố "cha mẹ" và "con" (sử dụng p2p) và có lẽ tôi sẽ không gặp khó khăn gì khi sử dụng phân loại cho nhóm "phụ huynh" - tôi biết chúng sẽ chính xác hơn về mặt ngữ nghĩa. Nhưng đối với khách hàng, họ dễ dàng hình dung thứ bậc nhất khi "bài đăng" được hiển thị trong quản trị viên giống như các trang: một cây đơn giản nơi trẻ em xuất hiện bên dưới cha mẹ, có tiền tố là "-" và trong trật tự thích hợp. Ngoài ra, các phương pháp khác nhau để gán thứ tự thông qua kéo-n-drop có thể được sử dụng. Nhóm thông qua phân loại (hoặc p2p) dẫn đến một danh sách "bài đăng" phẳng trong danh sách quản trị viên, điều này đơn giản là không rõ ràng về mặt trực quan.
Vì vậy, những gì tôi theo nghĩa đen là hành vi chính xác giống như các "trang" cốt lõi, nhưng với loại bài đăng tùy chỉnh của tôi. Tôi đã đăng ký loại bài đăng như mong đợi và trong quản trị viên, nó hoạt động hoàn hảo - Tôi có thể chỉ định cha mẹ và menu_order cho mỗi bản tin "bài đăng", chúng xuất hiện chính xác trong danh sách chỉnh sửa:
Spring 2012
— First Article
— Second Article
Và permalinks của họ dường như được xây dựng đúng. Trong thực tế, nếu tôi thay đổi bất cứ điều gì về cấu trúc, hoặc thậm chí thay đổi sên viết lại khi đăng ký loại bài đăng, chúng sẽ tự động cập nhật chính xác, vì vậy tôi biết có gì đó đang hoạt động:
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
Tôi cũng có các "trang" lõi tiêu chuẩn với các mối quan hệ phân cấp được tạo và chúng trông giống nhau trong quản trị viên, nhưng chúng thực sự hoạt động ở mặt trước (cả URL cha và con đều hoạt động tốt).
Cấu trúc permalink của tôi được đặt thành:
http://mysite.com/%postname%/
Tôi cũng đã thử điều này (chỉ vì rất nhiều câu trả lời khác dường như cho thấy nó là cần thiết, mặc dù nó không có ý nghĩa trong trường hợp của tôi):
http://mysite.com/%category%/%postname%/
CPT đăng ký của tôi bao gồm:
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
Sự khác biệt duy nhất có thể nhìn thấy giữa trẻ em loại bài đăng tùy chỉnh của tôi và trẻ em trang bình thường , đó là CPT của tôi có sên ở đầu cấu trúc permalink, sau đó là sên cha / con (trong đó các trang bắt đầu bằng sên bố mẹ / con, không có "tiền tố"). Tại sao điều này sẽ hôi mọi thứ lên, tôi không biết. Rất nhiều bài báo dường như chỉ ra rằng đây chính xác là cách các permalinks CPT phân cấp như vậy nên hoạt động - nhưng của tôi, mặc dù được hình thành độc đáo, không hoạt động.
Điều cũng gây trở ngại cho tôi là khi tôi kiểm tra các truy vấn cho trang 404 đó - chúng dường như chứa các giá trị chính xác cho WP để "tìm" các trang con của tôi, nhưng có gì đó không hoạt động.
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
Tôi đã thử điều này với nhiều chủ đề khác nhau, bao gồm hai mươi mười hai, chỉ để chắc chắn rằng đó không phải là một số mẫu bị thiếu trong phần của tôi.
Sử dụng Trình kiểm tra quy tắc Rewrite, đây là nội dung hiển thị cho url: http://mysite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
Làm thế nào nó hiển thị trên một trang thanh tra khác:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Đầu ra viết lại này sẽ khiến tôi tin rằng permalink "không đẹp" sau đây sẽ hoạt động:
http://mysite.com/?newsletter=spring-2012&page=first-article
Nó không 404, nhưng nó hiển thị "bản tin" của mục CPT, không phải cho trẻ em. Yêu cầu trông như thế này:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
cột.