Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » Hiển thị wordpress submenu dưới parent menu – wp_nav_menu

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

Thứ Ba, 07/10/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Khi sử dụng wp_nav_menu có một vấn đề là bạn muốn chỉ hiển thị submenu của một menu, ví 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ấy bất kỳ thành phần nào có trong mảng, cấu trúc:

<?php wp_filter_object_list( $list, $args, $operator, $field ); ?>

Trong đó:

  • $list: mảng đối tượng ban đầu.
  • $args: Tìm một phần 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 tất cả 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 ví 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 = '<ul id="menu-' . $menu_name . '">';

	foreach ( (array) $menu_items as $key => $menu_item ) {
	    $title = $menu_item->title;
	    $url = $menu_item->url;
	    $menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
	}
	$menu_list .= '</ul>';
    } else {
	$menu_list = '<ul><li>Menu "' . $menu_name . '" not defined.</li></ul>';
    }
    // $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ấy bài viết này hữu ích, hãy chia sẻ với bạn bè bằng cách nhấn nút chia sẻ ở bên dưới. Theo dõi chúng tôi trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: nav menu, wp_nav_menu

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.