Ben sadece bir yazı tipi "bölüm" ve bir yazı tipi "çizgi dizi" arasında bir yazı / ebeveyn ilişkisi kurduk.
Başka bir yazı türünden üst öğe atamak için meta kutusuna eklemek için bu kod biraz kullandım:
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.
}
Bu, yönetici bölümünde diziyi bölümün bir üst öğesi olarak ayarlamama izin verdi, ancak gönderiyi görüntülemeye çalıştığımda, bir 404 alıyorum. Url yapısı:
domain/episodes/series-name/episode-name
Serinin URL'si:
domain/cartoon-series/series-name
Bölümün URL'sinin olmasını istiyorum:
domain/cartoon-series/series-name/episode-name
Neyi kaçırıyorum? Bir yazı türünün tamamını başka bir yazı türünün alt öğesi yapmak mümkün müdür? Böylece, bölüm listesinin URL'sini bile alabilirim:
domain/cartoon-series/series-name/episodes
Teşekkürler! Mat
İstendiği gibi, söz konusu iki özel gönderi türünün kodu şöyledir:
$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 );
CPT UI eklentisini kullanıyorum, bu yüzden bu kodu doğrudan düzenleyemiyorum. Bu sadece CPT UI ihracat kodu sağlar.
İki CPT'yi bağlayan başka bir kodum yok. Belki de eksik olan budur. Az önce bağlantıyı yapmak için sayfaya meta kutusunu yerleştiren bu kodu çevrimiçi buldum. İşi yapmak yeterli değil mi? Görünüşe göre post_parent ayarlıyor.
Teşekkürler! Mat
pre_get_posts
sorguyu başarı ile değiştirmek için uğraştım, daha karmaşık bir şey anlayamadım. Bir kedinin köpeğin ebeveyni olması gibi. Ben sadece bir hiyerarşik yazı türü kullanmanızı veya meta alanları kullanarak realtionship ayarlamak öneririz .
parent_id
sorgu var kullanır ve ilişkiyi ayarlamak için daha fazla kodlamaya gerek yoktur. Sorun, oluşturulan URL'nin WordPress tarafından tanınmamasıdır. Çalışmasını sağlayan bir yeniden yazma kuralı bulmaya çalışıyordum, ancak başarılı olamadım. Şimdi bir çözüm araştırıyorum.