จะเพิ่มลิงค์หน้าการเก็บถาวรชนิดโพสต์ที่กำหนดเองไปยังเมนู nav ได้อย่างไร?


9

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

นอกจากนี้ลิงค์จะต้องใช้งานได้หากคุณอยู่ในหน้า อาจเป็นไปไม่ได้ แต่มีปลั๊กอินบางอย่างหรือไม่ สำหรับความรักของฉันฉันไม่สามารถหาได้ :(

ฉันพบเฉพาะปลั๊กอินนี้ที่ชื่อว่าCustom Post Type Archives ใน Nav Menusซึ่งไม่ได้ทำอะไรเลย แต่เพิ่มลิงก์ที่กำหนดเองไปยังเมนู .. ด้วยไซต์ -l url แบบเต็ม มันไม่ทำงานหรือไม่ไดนามิกมาก

ฉันคิดว่าอาจเป็นวิธีที่ง่ายที่สุดในการแทนที่wp_nav_menu()และเพิ่มลิงก์ของฉันด้วยตนเองจากนั้นใช้$_GETข้อมูลเพื่อควบคุม "ลิงก์ที่ใช้งานอยู่ในปัจจุบัน"


หลังจากการหาคำตอบของสตีเฟ่นฉันก็ลงเอยด้วยวิธีแก้ปัญหานี้: wordpress.org/support/topic/
.....

คำตอบ:


1

นี่เป็นวิธีหนึ่งที่ฉันคิดว่าควรใช้งานได้ (แม้ว่าจะยังไม่ผ่านการทดสอบ)

//Hook on to the filter for the (custom) main menu
// 'wp_list_pages' filter is a fallback, when a custom menu isn't being used 
add_filter( 'wp_list_pages', 'new_nav_menu_items' );
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
//Can also hook into a specific menu...
//add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

function new_nav_menu_items($items) {
    global $wp_query;
    $class ='';

    //Checks if we are viewing CPT 'myposttype', if so give it the 'active' class.
    if(isset($wp_query->query_vars['post_type'])&& $wp_query->query_vars['post_type']=='myposttype') 
        $class = 'current_page_item';

    //This generates the url of the CPT archive page
    $url = add_query_arg('post_type','myposttype',site_url());

    $myitem = '<li class="'.$class.'"><a href="'.$url.'">My Custom Post Type</a></li>';

    $items = $items . $myitem;
    return $items;
}

ดูเหมือนว่าฉันจะไม่ได้เป็นคนที่สะอาดที่สุดของการแก้ปัญหา แต่ฉันไม่รู้วิธีอื่นใด ถ้ามีฉันอยากเห็นมัน!

สุดท้ายลิงก์จะเชื่อมโยงกับรายการที่กำหนดเองซึ่งไม่ใช่ "สวย" - แต่คุณสามารถทำได้ดังนั้นหากคุณใหม่บุ้ง CPT (สมมติว่ามีการใช้ลิงก์ถาวรที่กำหนดเอง .... )


ขอบคุณสำหรับการตอบ ดูเหมือนว่าจะใช้งานได้จริง อย่างไรก็ตามการจัดรูปแบบของ URL จำเป็นต้องมีการปรับแต่ง และฉันหวังว่าบางทีคุณอาจรู้เกี่ยวกับ WP มากกว่านี้ดังนั้นตอนนี้ URL คือ: example.com/?post_type=myposttype แต่ควรเป็น example.com/myposttype อาจจะง่าย$url = site_url() . 'myposttype';? และชั้นเรียนจะไม่ถูกรวมรวมถึงการใช้งานในปัจจุบัน
Kalle H. Väravas

$class = '';โอ้ขอโทษไม่เห็น อย่างไรก็ตามฉันไม่สามารถรับคลาสปกติแบบไดนามิกและวิธีการเชื่อมโยงที่ใช้งานอยู่ในปัจจุบันในการทำงาน?
Kalle H. Väravas

$wp_query->query_vars['post_type']=='myposttype'โอ้เป็นสองเท่าขออภัยไม่เห็น ใช้งานได้จริง นี่เป็นพื้นฐานที่ดีสำหรับการแก้ปัญหาแบบไดนามิกมากขึ้นขอบคุณแน่นอน!
Kalle H. Väravas

2

ในฐานะของ WordPress 4.4 (ธันวาคม 2015), ลิงค์ประเภทโพสต์ที่กำหนดเองตอนนี้ได้รับการสนับสนุนอย่างเป็นทางการในแกน WordPressโดยไม่ต้องใช้รหัสหรือปลั๊กอินของบุคคลที่สามใด ๆ

คุณสามารถอ่านทั้งหมดTrac # 16075ตั๋วสำหรับการสนทนาแบบเต็มหรือให้โพสต์ WordPress หลักสำหรับบทสรุปของฉลากเพิ่มเติม

ต้องการเปิดใช้งานใหม่ที่สร้างขึ้นในการสนับสนุนการเชื่อมโยงเมนูเก็บประเภทโพสต์ที่กำหนดเองจะต้องลงทะเบียนกับไม่ใช่ falsey (คือจริง) ค่าhas_archive, publicly_queryableและshow_in_nav_menus:

add_action( 'init', function () {
    register_post_type( 'movies',
        array(
            'labels' => array(
                'name' => __( 'Movies' ),
                'singular_name' => __( 'Movie' ),
                'archives' => __( 'Movies' ),
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array(
                'slug' => 'movies',
            ),
        )
    );
});

ด้วยการเพิ่มเหล่านี้คุณจะเห็น metabox ใหม่บนหน้าจอAppearance> Menus admin

ลิงก์การเก็บถาวรชนิดของโพสต์สามารถพบได้ในแท็บ 'ดูทั้งหมด' ภายในเมตาโบสต์ของประเภทโพสต์:

WordPress โพสต์ที่กำหนดเองประเภทคลังลิงค์เมนูลิงค์

หมายเหตุ: คุณอาจต้องสลับลิ้นชัก "ตัวเลือกหน้าจอ" และตรวจสอบให้แน่ใจว่าได้ตรวจสอบชื่อ "คลังเก็บประเภทโพสต์" (เช่นภาพยนตร์) เพื่อให้ปรากฏบนหน้าจอเมนู

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