Kiểm tra xem trang có trong một menu nhất định không


7

Tôi có một khách hàng muốn có hai "menu chính" và chúng tôi cần hiển thị theo chương trình bất kỳ menu nào có chứa trang hiện tại. Làm thế nào tôi có thể làm điều đó?

Ví dụ: Chúng tôi đang ở trang "Giới thiệu". Chỉ ra menu nào trong hai menu chứa trang "Giới thiệu" và hiển thị cái đó.


Tôi có thể hỏi tại sao họ muốn hai menu chính? Nghe có vẻ kỳ quặc, hoặc giống như họ không muốn điều này, đây chỉ là ý tưởng của họ về cách thực hiện những gì họ thực sự muốn
Tom J Nowell

Tôi không cần phải làm điều này, nhưng những gì họ yêu cầu cả về cấu trúc và thiết kế trang web đòi hỏi hai menu cho hai phần chủ yếu là độc lập của trang web. Tôi đoán rằng chức năng này cũng có thể được sử dụng cho một số thứ khác, và tôi đã ngạc nhiên rằng tôi đã không tìm thấy bất cứ thứ gì giống như khi tôi nhìn lần đầu tiên.
mrwweb

Câu trả lời:


18

Đây là chức năng tôi đã viết để tìm ra điều này. Bạn cung cấp cho nó một slug / name / ID và ID bài đăng / trang và nó sẽ trả về TRUEnếu bài đăng / trang đó nằm trong menu được chỉ định và FALSEnếu không. Sau đó, nó chỉ đơn giản là vấn đề của một câu lệnh if / other nhanh chóng để kiểm tra hai menu và hiển thị chính xác.

/**
 * Check if post is in a menu
 *
 * @param $menu menu name, id, or slug
 * @param $object_id int post object id of page
 * @return bool true if object is in menu
 */
function cms_is_in_menu( $menu = null, $object_id = null ) {

    // get menu object
    $menu_object = wp_get_nav_menu_items( esc_attr( $menu ) );

    // stop if there isn't a menu
    if( ! $menu_object )
        return false;

    // get the object_id field out of the menu object
    $menu_items = wp_list_pluck( $menu_object, 'object_id' );

    // use the current post if object_id is not specified
    if( !$object_id ) {
        global $post;
        $object_id = get_queried_object_id();
    }

    // test if the specified page is in the menu or not. return true or false.
    return in_array( (int) $object_id, $menu_items );

}

Cách sử dụng ví dụ:

if( cms_is_in_menu( 'main-menu' ) ) {
    // do something like wp_nav_menu( $args );
}

Đoạn trích hay. Tôi cần sử dụng nó để phục vụ một hình ảnh tiêu đề khác nhau tùy thuộc vào menu mà trang được gán. Cảm ơn!
Stephen S.

Tại sao được $menuthông qua esc_attrtrong dòng đầu tiên?
Luke A. Leber

@ LukeA.Leber Đã lâu lắm rồi tôi mới viết bài này. Tôi tin rằng tôi đã sử dụng nó trong bối cảnh mà các biên tập viên trang web có thể đặt các giá trị được sử dụng trong chức năng này.
mrwweb

Điều này rõ ràng chỉ hoạt động với các menu 1 cấp.
chắc chắn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.