Saya baru saja mengatur hubungan post / parent antara tipe posting "episode" dan tipe posting "kartun-seri."
Saya menggunakan sedikit kode ini untuk ditambahkan di kotak meta untuk menetapkan induk dari jenis posting lain:
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.
}
Itu berfungsi pada layar admin dalam memungkinkan saya untuk mengatur seri sebagai orangtua untuk episode, tetapi ketika saya mencoba untuk melihat posting, saya mendapatkan 404. Struktur url adalah:
domain/episodes/series-name/episode-name
Url untuk seri ini adalah:
domain/cartoon-series/series-name
Saya ingin url untuk episode ini:
domain/cartoon-series/series-name/episode-name
Apa yang saya lewatkan? Apakah mungkin untuk membuat seluruh jenis posting anak dari jenis posting lain? Jadi, saya bahkan bisa mendapatkan url untuk daftar episode:
domain/cartoon-series/series-name/episodes
Terima kasih! Mat
Seperti yang diminta, berikut adalah kode untuk dua jenis pos kustom yang dimaksud:
$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 );
Saya menggunakan plugin CPT UI, jadi saya tidak dapat mengedit kode itu secara langsung. Itu hanya kode ekspor yang disediakan CPT UI.
Saya tidak punya kode lain yang menghubungkan kedua CPT. Mungkin itu yang saya lewatkan. Saya baru saja menemukan kode online yang menempatkan metabox pada halaman untuk melakukan penautan. Apakah itu tidak cukup untuk melakukan pekerjaan itu? Sepertinya itu mengatur post_parent.
Terima kasih! Mat
pre_get_posts
untuk mengubah kueri tanpa hasil, sesuatu yang lebih rumit terlibat yang belum dapat saya pahami. Seperti memiliki kucing menjadi orangtua anjing. Saya menyarankan untuk menggunakan hanya satu jenis posting hirarkis atau mengatur hubungan dengan menggunakan bidang meta .
parent_id
kueri var dan tidak perlu lagi kode untuk mengatur hubungan. Masalahnya adalah bahwa URL yang dihasilkan tidak dikenali oleh WordPress. Saya sudah berusaha menemukan aturan penulisan ulang yang membuatnya berfungsi tetapi saya belum berhasil. Saya sekarang sedang menyelidiki suatu solusi.