เป็นไปได้หรือไม่ที่จะเพิ่มเมนูประเภทโพสต์ที่กำหนดเองเป็นเมนูย่อยประเภทโพสต์ที่กำหนดเองอื่น


28

ฉันกำลังพัฒนาปลั๊กอิน wordpress ที่ใช้โพสต์ที่กำหนดเองสองประเภท สิ่งที่ฉันอยากรู้ที่นี่: เป็นไปได้ไหมที่จะเพิ่มเมนูประเภทโพสต์ที่กำหนดเองเป็นเมนูย่อยของโพสต์ประเภทอื่นที่กำหนดเอง?

คำตอบ:


59

ใช่. เมื่อคุณลงทะเบียนประเภทโพสต์ของคุณคุณจะต้องตั้งค่าshow_in_menuเป็นหน้าที่คุณต้องการให้มันปรากฏบน

การเพิ่มประเภทโพสต์ที่กำหนดเองเป็นเมนูย่อยของโพสต์

ที่นี่เราตั้งค่าประเภทโพสต์ "ภาพยนตร์" ที่จะรวมอยู่ในเมนูย่อยภายใต้โพสต์

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

หากคุณมีการลงทะเบียน taxonomy ให้กับประเภทโพสต์ที่กำหนดเองคุณจะต้องเพิ่มลงในหน้าเว็บด้วย

ในadd_submenu_page()อาร์กิวเมนต์แรกคือหน้าเพื่อกำหนดให้และสุดท้ายคือกระสุนเมนู

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

การเพิ่มประเภทโพสต์ที่กำหนดเองเป็นเมนูย่อยของประเภทโพสต์ที่กำหนดเองอื่น

หากต้องการเพิ่มหน้าไปยังประเภทโพสต์ที่กำหนดเองอื่นให้รวมพารามิเตอร์สตริงข้อความค้นหาของโพสต์พร้อมกับชื่อหน้า

หากต้องการเพิ่มภาพยนตร์ CPT และประเภทอนุกรมวิธานภายใต้ประเภทโพสต์ความบันเทิงปรับรหัสเช่นนี้

edit.php กลายเป็น edit.php?post_type=entertainment

edit-tags.php กลายเป็น edit-tags.php?taxonomy=genre&post_type=entertainment

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php?post_type=entertainment'
    )
);

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php?post_type=entertainment', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}

2
สวัสดีขอบคุณ. มันได้ผล. แต่เมนูย่อยหายไปเมนูย่อย
Ari

ฉันได้อัปเดตคำตอบของฉันพร้อมวิธีการรวม taxonomies แล้ว
ลมบ้าหมู

สวัสดีขอบคุณ! ฉันได้พบวิธีที่จะทำ! แต่อาจเป็นของคุณจะให้ผลลัพธ์ที่ดีกว่า!
Ari

show_in_menuแอตทริบิวต์ไม่ได้ทำงานให้ฉัน
Francisco Corrales Morales

ขออภัยที่ต้องทำซ้ำ เพื่อให้เมนูย่อยและเมนู paretn ยังคงเน้นอยู่คุณต้องให้ข้อมูลเพิ่มเติมกับ WP ตกลงพารามิเตอร์ 'show_in_menu' ทำให้เมนูย่อยเป็นปัจจุบัน / ถูกเน้นเมื่อ 'my_post_type' อยู่บนหน้าจอ ตอนนี้เราต้องเพิ่มการกระทำอื่นที่จะเน้นเมนูหลัก คุณสามารถลองสิ่งนี้: add_filter ('parent_file', 'menu_highlight')); ฟังก์ชัน menu_highlight ($ parent_file) {global $ plugin_page, $ post_type; if ('my_post_type' if == $ post_type) {$ plugin_page = 'edit.php? post_type = my_post_type'; // submenu hook name} คืนค่า $ parent_file; }
TomeeNS

6

โพสต์ที่กำหนดเองของเราประเภท:

$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);

เพิ่มเขาสำหรับประเภทโพสต์ที่กำหนดเอง (ตัวอย่างเช่น "ผลิตภัณฑ์"):

$existing_CPT_menu = 'edit.php?post_type=product';
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page($existign_CPT_menu, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

หรือเพิ่มสำหรับเมนูปลั๊กอินที่กำหนดเองของเรา:

// Create plugin menu
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Create submenu with href to view custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

ขอบคุณ! มันมีประโยชน์สำหรับฉัน
NSukonny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.