Để lấy mảng dữ liệu các mục menu trong WordPress, bạn có thể sử dụng hàm wp_get_nav_menu_items(). Hàm này sẽ trả về một mảng các đối tượng mục menu dựa trên ID hoặc tên của menu.

Dưới đây là các bước chi tiết để lấy mảng dữ liệu các mục menu trong WordPress:

1. Tìm ID hoặc Tên của Menu

Trước khi bạn có thể lấy các mục menu, bạn cần biết ID hoặc tên của menu mà bạn muốn lấy. Bạn có thể tìm thấy thông tin này trong phần quản lý Giao diện > Menu của WordPress Dashboard.

2. Sử dụng Hàm wp_get_nav_menu_items()

Sau khi biết ID hoặc tên của menu, bạn có thể sử dụng hàm wp_get_nav_menu_items() để lấy các mục menu.

Cú pháp:

wp_get_nav_menu_items( $menu, $args );

$menu: ID, slug, hoặc đối tượng menu để lấy các mục menu. Đây là tham số bắt buộc.

$args: Một mảng các tham số bổ sung. Đây là tham số tùy chọn.

3. Ví Dụ Mã PHP

Dưới đây là một ví dụ cơ bản để lấy các mục menu bằng ID và in ra danh sách các mục menu:

// Lấy các mục menu bằng ID của menu (ví dụ: ID là 2)
$menu_id = 2;
$menu_items = wp_get_nav_menu_items($menu_id);

// Kiểm tra nếu menu tồn tại và có các mục
if (!empty($menu_items)) {
    echo '<ul>';
    foreach ($menu_items as $menu_item) {
        echo '<li>';
        echo '<a href="' . $menu_item->url . '">' . $menu_item->title . '</a>';
        echo '</li>';
    }
    echo '</ul>';
} else {
    echo 'Menu không tồn tại hoặc không có mục nào.';
}

4. Ví Dụ Sử Dụng Tên Menu

Nếu bạn muốn sử dụng tên của menu thay vì ID, bạn có thể làm như sau:

// Lấy các mục menu bằng tên của menu
$menu_name = 'primary-menu'; // Tên của menu, thay bằng tên menu của bạn
$menu_items = wp_get_nav_menu_items($menu_name);

// Kiểm tra nếu menu tồn tại và có các mục
if (!empty($menu_items)) {
    echo '<ul>';
    foreach ($menu_items as $menu_item) {
        echo '<li>';
        echo '<a href="' . $menu_item->url . '">' . $menu_item->title . '</a>';
        echo '</li>';
    }
    echo '</ul>';
} else {
    echo 'Menu không tồn tại hoặc không có mục nào.';
}

5. Cấu Trúc Của Đối Tượng Mục Menu

Đối tượng mục menu được trả về bởi wp_get_nav_menu_items() sẽ chứa các thuộc tính như:

  • ID: ID của mục menu.
  • title: Tiêu đề của mục menu.
  • url: Đường dẫn liên kết của mục menu.
  • menu_item_parent: ID của mục menu cha (nếu có).
  • type: Loại mục menu (ví dụ: post_type, taxonomy, custom).
  • object: Loại đối tượng của mục menu (ví dụ: page, category).

Bạn có thể sử dụng các thuộc tính này để tùy chỉnh hiển thị menu của mình theo nhu cầu.

Mảng 2 chiều và đa chiều của menu

Để lấy mảng 2 chiều hoặc đa chiều của các mục menu trong WordPress, bạn có thể sử dụng hàm wp_get_nav_menu_items() để lấy tất cả các mục menu, sau đó sắp xếp chúng thành một cấu trúc mảng 2 chiều hoặc đa chiều theo mong muốn.

1. Lấy Mảng 2 Chiều Của Menu

Mảng 2 chiều thường bao gồm các mục menu cấp cao nhất và các mục con trực tiếp của chúng. Để xây dựng mảng 2 chiều, bạn cần sắp xếp các mục menu dựa trên thuộc tính menu_item_parent.

Dưới đây là ví dụ mã PHP để tạo mảng 2 chiều:

// Lấy các mục menu bằng ID của menu
$menu_id = 2; // Thay bằng ID menu của bạn
$menu_items = wp_get_nav_menu_items($menu_id);

$menu_array = array();

// Sắp xếp các mục menu thành mảng 2 chiều
if (!empty($menu_items)) {
    foreach ($menu_items as $menu_item) {
        if ($menu_item->menu_item_parent == 0) {
            // Mục menu cấp cao nhất
            $menu_array[$menu_item->ID] = array(
                'title' => $menu_item->title,
                'url' => $menu_item->url,
                'children' => array()
            );
        } else {
            // Mục menu con
            $menu_array[$menu_item->menu_item_parent]['children'][$menu_item->ID] = array(
                'title' => $menu_item->title,
                'url' => $menu_item->url
            );
        }
    }
}

// In ra mảng 2 chiều
echo '<pre>';
print_r($menu_array);
echo '</pre>';

2. Lấy Mảng Đa Chiều của Menu

Để tạo mảng đa chiều, bạn cần xây dựng cấu trúc mảng đệ quy để bao gồm tất cả các cấp mục menu và các mục con của chúng.

Dưới đây là ví dụ mã PHP để tạo mảng đa chiều:

// Lấy các mục menu bằng ID của menu
$menu_id = 2; // Thay bằng ID menu của bạn
$menu_items = wp_get_nav_menu_items($menu_id);

function build_tree(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element->menu_item_parent == $parentId) {
            $children = build_tree($elements, $element->ID);
            if ($children) {
                $element->children = $children;
            }
            $branch[$element->ID] = array(
                'title' => $element->title,
                'url' => $element->url,
                'children' => isset($element->children) ? $element->children : array()
            );
        }
    }

    return $branch;
}

// Xây dựng mảng đa chiều
$menu_tree = build_tree($menu_items);

// In ra mảng đa chiều
echo '<pre>';
print_r($menu_tree);
echo '</pre>';

3. Giải Thích Mã

  • Lấy các mục menu: Chúng ta sử dụng hàm wp_get_nav_menu_items() để lấy tất cả các mục menu từ ID menu cụ thể.
  • Hàm build_tree(): Đây là hàm đệ quy giúp xây dựng cấu trúc cây cho các mục menu:
    • Hàm này nhận một mảng các phần tử ($elements) và parentId, mặc định là 0 (các mục menu cấp cao nhất).
    • Với mỗi phần tử, hàm kiểm tra xem menu_item_parent có bằng với parentId hiện tại không.
    • Nếu có, phần tử đó được thêm vào nhánh (branch) và hàm được gọi lại đệ quy để tìm các mục con của nó.
    • Mảng kết quả cuối cùng là một cây đa chiều của các mục menu.

Với hai đoạn mã trên, bạn có thể dễ dàng lấy mảng 2 chiều hoặc đa chiều của các mục menu trong WordPress, tùy thuộc vào cấu trúc dữ liệu mà bạn mong muốn.