Ok, tôi đã nhận được các ví dụ hoạt động cho cả 3 loại yêu cầu. Phải mất rất nhiều thử nghiệm và làm rối tung để làm cho chúng hoạt động. Tôi đoán Milo rất giỏi trong việc thúc đẩy mọi người trả lời câu hỏi của chính họ.
Sau vô số thay đổi và làm mới các permalinks, tôi nhận ra rằng việc tìm ra các url bên ngoài add_rewrite_url sẽ dễ dàng hơn nhiều và một khi chúng hoạt động thì xác định viết lại. Ví dụ là index.php?param=foo&post_type=example_type.
Một điều hiển nhiên khác, nhưng thêm nó vào đây để nó có thể giúp đỡ người khác. Bạn phải xác định quy tắc loại bài đăng add_rewrite_rule tùy chỉnh TRƯỚC KHI bạn xác định quy tắc ký tự đại diện trang / trang phụ của mình. Tôi đã lãng phí khá nhiều thời gian với cái đó và nghĩ rằng đó là điều chính khiến tôi không hiểu tại sao các quy tắc không hoạt động.
Dưới đây là 3 quy tắc đáp ứng mọi nhu cầu của tôi. Quy tắc Trang / Trang phụ được kết hợp thành một.
// Custom Post Archive
add_rewrite_rule(
'^foo/example_type/?$',
'index.php?param=foo&post_type=example_type',
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/example_type/([^/]*)/?$',
'index.php?param=foo&example_type=$matches[1]',
'top'
);
// Pages, Top-Level and Sub-Pages
// This MUST be placed in the code AFTER custom post add_rewrite_rule
add_rewrite_rule(
'^foo/(.+)/?$',
'index.php?param=foo&pagename=$matches[1]',
'top'
);
Ngoài ra, những gì tôi đã làm là thiết lập một vòng lặp để thêm nhiều quy tắc loại bài đăng tùy chỉnh. Hãy nhớ rằng, bạn phải xác định loại quy tắc add_rewrite_rule tùy chỉnh TRƯỚC KHI bạn xác định quy tắc ký tự đại diện trang / trang phụ của mình.
$custom_types = array('example_type', 'projects', 'people');
foreach($custom_types as $type) {
// Custom Post Archive
add_rewrite_rule(
'^foo/'.$type.'/?$',
'index.php?param=foo&post_type='.$type,
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/'.$type.'/([^/]*)/?$',
'index.php?param=foo&'.$type.'=$matches[1]',
'top'
);
}
Trình phân tích Rewrite mà Milo chuyển qua khá hữu ích khi cố gắng hiểu rõ hơn cách truy vấn Wordpress cho các trang / bài đăng.
pageloại bài đăng, hoặc bất kỳ trang nào? Điều gì về các trang cha / con trong hệ thống phân cấp?