Hiển thị wordpress submenu dưới parent menu – wp_nav_menu

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Hiển thị wordpress submenu dưới parent menu – wp_nav_menu

Khi sử dụng wp_nav_menu có 1 vấn đề là bạn mong muốn chỉ hiển thị submenu của một menu, tỉ dụ trong sidebar. Nhưng wordpress không có sẵn api giúp bạn lấy dữ liệu các menu con của menu mẹ. Đoạn code dưới đây có thể giúp được bạn làm điều đó.
wp_nav_menu
Truyền mọi tham số theo ý đồ của bạn vào wp_nav_menu . Ở đây mình xác định menu mẹ có tiêu đề “About Us”.
Thêm tham số ‘submenu’ vào hàm wp_nav_menu như dưới đây:

 // Usage: $args = array( 'menu' =>  'Menu Name', 'submenu' =>  'About Us', ); wp_nav_menu( $args );  

Và chúng ta sẽ chỉ hiển thị những submenu dưới “About Us”. Copy đoạn code sau vào functions.php

 add_filter( 'wp_nav_menu_objects', 'submenu_limit', 10, 2 ); function submenu_limit( $items, $args ) { if ( empty($args-> submenu) ) return $items; $parent_id = array_pop( wp_filter_object_list( $items, array( 'title' =>  $args-> submenu ), 'and', 'ID' ) ); $children = submenu_get_children_ids( $parent_id, $items ); foreach ( $items as $key =>  $item ) { if ( ! in_array( $item-> ID, $children ) ) unset($items[$key]); } return $items; } function submenu_get_children_ids( $id, $items ) { $ids = wp_filter_object_list( $items, array( 'menu_item_parent' =>  $id ), 'and', 'ID' ); foreach ( $ids as $id ) { $ids = array_merge( $ids, submenu_get_children_ids( $id, $items ) ); } return $ids; }  

Hàm wp_filter_object_list dùng để làm lấy bất kỳ phần tử nào có trong mảng, cấu trúc:

     

Trong đó:

  • $list : mảng đối tượng ban đầu.
  • $args : Tìm phần nào mảng chứa key=> value trong $list.
  • $operator : có 2 giá trị ‘or’ và ‘and’, nếu $operator=’or’ nghĩa là chỉ cần một thành phần từ mảng tìm kiếm, tìm thấy trong mảng gốc. ‘and’ thì yêu cầu mọi thứ các key=> value của $args phải đều tìm thấy trong $list .
  • $field : các giá trị của trường key sẽ trả về.

Lưu ý : để lấy toàn bộ submenu theo đa tầng, chúng ta tạo hàm lặp submenu_get_children_ids , những items con phát hiện được gộp vào biến $ids, theo logic code hoạt động chung trong vùng hàm và kết quả cuối cùng biến mảng $ids chứa tất cả ID các submenu của menu ‘About Us’.

Ngoài ra, Để lấy dữ liệu items trong wp_nav_menu bạn sử dụng hàm wp_get_nav_menu_items . Xem thí dụ mẫu:

  // Get the nav menu based on $menu_name (same as 'theme_location' or 'menu' arg to wp_nav_menu) // This code based on wp_nav_menu's code to get Menu ID from menu slug $menu_name = 'custom_menu_slug'; if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) { $menu = wp_get_nav_menu_object( $locations[ $menu_name ] ); $menu_items = wp_get_nav_menu_items($menu-> term_id); $menu_list = ' 
    '; foreach ( (array) $menu_items as $key => $menu_item ) { $title = $menu_item-> title; $url = $menu_item-> url; $menu_list .= '
  • ' . $title . '
  • '; } $menu_list .= '
'; } else { $menu_list = '
  • Menu "' . $menu_name . '" not defined.
'; } // $menu_list now ready to output

Xem thêm tùy biến hiển thị menus con theo menu kế cận.

Nếu bạn thích bài viết này, hãy cỗ vũ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và hãy nhớ chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng đều có thể theo dõi blog này trên Twitter và Facebook

Bài viết Hiển thị wordpress submenu dưới parent menu – wp_nav_menu được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang