मैंने अभी एक पोस्ट टाइप "एपिसोड" और एक पोस्ट टाइप "कार्टून-सीरीज़" के बीच एक पोस्ट / पैरेंट संबंध स्थापित किया है।
मैंने माता-पिता को किसी अन्य पोस्ट प्रकार से असाइन करने के लिए मेटा बॉक्स में जोड़ने के लिए इस बिट कोड का उपयोग किया है:
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.
}
उस एपिसोड में मुझे अभिभावक के रूप में श्रृंखला निर्धारित करने की अनुमति देने में व्यवस्थापक स्क्रीन पर काम किया गया था, लेकिन जब मैं पोस्ट देखने की कोशिश करता हूं, तो मुझे 404 मिलता है। यूआरएल संरचना है:
domain/episodes/series-name/episode-name
श्रृंखला के लिए url है:
domain/cartoon-series/series-name
मैं इस प्रकरण के लिए url पसंद करूंगा:
domain/cartoon-series/series-name/episode-name
मैं क्या खो रहा हूँ? क्या पूरे पोस्ट प्रकार को किसी अन्य पोस्ट प्रकार का बच्चा बनाना संभव है? तो, फिर मैं एपिसोड की सूची के लिए url भी प्राप्त कर सकता हूं:
domain/cartoon-series/series-name/episodes
धन्यवाद! मैट
अनुरोध के अनुसार, यहां दो कस्टम पोस्ट प्रकारों के लिए कोड दिया गया है:
$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 प्रदान करता है।
मेरे पास कोई दूसरा कोड नहीं है जो दो सीपीटी को जोड़ता है। शायद यही मुझे याद आ रहा है। मुझे बस वह कोड ऑनलाइन मिला जो लिंक करने के लिए पृष्ठ पर मेटाबेस को रखता है। क्या यह काम करने के लिए पर्याप्त नहीं है? ऐसा लगता है कि यह post_parent सेट करता है।
धन्यवाद! मैट
pre_get_posts
बिना किसी सफलता के क्वेरी को बदलने के लिए हुकिंग की है, कुछ अधिक जटिल शामिल है जिसे मैं समझ नहीं पा रहा हूं। जैसे बिल्ली का होना कुत्ते का माता-पिता होना। मेरा सुझाव है कि केवल एक पदानुक्रमित पद प्रकार का उपयोग करें या मेटा फ़ील्ड का उपयोग करके रीयलटियनशिप सेट करें ।
parent_id
क्वेरी संस्करण का उपयोग करता है और इसे संबंध स्थापित करने के लिए कोड की अधिक आवश्यकता नहीं होती है। समस्या यह है कि उत्पन्न यूआरएल वर्डप्रेस द्वारा मान्यता प्राप्त नहीं है। मैं एक फिर से लिखना नियम खोजने की कोशिश कर रहा हूं जो इसे काम करता है लेकिन मुझे सफलता नहीं मिली है। मैं अब एक समाधान की जांच कर रहा हूं।