Tôi vừa thiết lập mối quan hệ bài đăng / phụ huynh giữa loại "tập" và loại bài "phim hoạt hình".
Tôi đã sử dụng bit mã này để thêm vào hộp meta để gán cha mẹ từ một loại bài đăng khác:
add_action('admin_menu', function() {
remove_meta_box('pageparentdiv', 'episodes', 'normal');
});
add_action('add_meta_boxes', function() {
add_meta_box('episodes-parent', 'Cartoon Series', 'episodes_attributes_meta_box', 'episodes', 'side', 'default');
});
function episodes_attributes_meta_box($post) {
$post_type_object = get_post_type_object($post->post_type);
if ( $post_type_object->hierarchical ) {
$pages = wp_dropdown_pages(array('post_type' => 'cartoon-series', 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
if ( ! empty($pages) ) {
echo $pages;
} // end empty pages check
} // end hierarchical check.
}
Điều đó đã làm việc trên màn hình quản trị viên trong việc cho phép tôi đặt sê-ri làm phụ huynh cho tập phim, nhưng khi tôi cố gắng xem bài đăng, tôi nhận được 404. Cấu trúc url là:
domain/episodes/series-name/episode-name
Url cho chuỗi là:
domain/cartoon-series/series-name
Tôi muốn url cho tập phim là:
domain/cartoon-series/series-name/episode-name
Tôi đang thiếu gì? Có thể làm cho toàn bộ một loại bài đăng con của một loại bài đăng khác? Vì vậy, sau đó tôi thậm chí có thể lấy url cho danh sách các tập là:
domain/cartoon-series/series-name/episodes
Cảm ơn! Matt
Theo yêu cầu, đây là mã cho hai loại bài đăng tùy chỉnh trong câu hỏi:
$labels = array(
"name" => "Cartoon Series",
"singular_name" => "Cartoon Series",
"menu_name" => "Cartoon Series",
"all_items" => "All Cartoon Series",
"add_new" => "Add New",
"add_new_item" => "Add New Cartoon Series",
"edit" => "Edit",
"edit_item" => "Edit Cartoon Series",
"new_item" => "New Cartoon Series",
"view" => "View",
"view_item" => "View Cartoon Series",
"search_items" => "Search Cartoon Series",
"not_found" => "No Cartoon Series Found",
"not_found_in_trash" => "No Cartoon Series Found in Trash",
"parent" => "Parent Cartoon Series",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "cartoon-series", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "cartoon-series", $args );
$labels = array(
"name" => "Episodes",
"singular_name" => "Episode",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "episodes", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "episodes", $args );
Tôi đang sử dụng plugin UI CPT, vì vậy tôi không thể chỉnh sửa mã đó trực tiếp. Đó chỉ là mã xuất khẩu CPT UI cung cấp.
Tôi không có bất kỳ mã nào khác liên kết hai CPT. Có lẽ đó là những gì tôi đang thiếu. Tôi chỉ tìm thấy mã trực tuyến đặt metabox trên trang để thực hiện liên kết. Nó không đủ để làm công việc? Có vẻ như nó đặt post_parent.
Cảm ơn! Matt
pre_get_posts
để thay đổi truy vấn nhưng không thành công, đôi khi có liên quan phức tạp hơn mà tôi không thể hiểu được. Giống như có một con mèo là cha mẹ của một con chó. Tôi đề nghị chỉ sử dụng một loại bài đăng phân cấp hoặc đặt thực tế sử dụng các trường meta .
parent_id
var truy vấn và nó không cần thêm mã để thiết lập mối quan hệ. Vấn đề là URL được tạo không được WordPress nhận ra. Tôi đã cố gắng tìm một quy tắc viết lại để làm cho nó hoạt động nhưng tôi đã không thành công. Bây giờ tôi đang điều tra một giải pháp.