Chuyển đổi đầu ra của các mục nav_menu thành một mảng đa chiều giống như cây


10

Có cách nào để lấy các mục menu nav dưới dạng một mảng nhiều chiều thay vì một mảng phẳng không?

Theo cấu trúc giống như cây, ý tôi là thứ gì đó sẽ giữ mối quan hệ giữa các món đồ con và cha mẹ, như vậy (đây chỉ là một ví dụ)

array(
  array(
    'post_type' => 'page',
    'post_name' => 'Home',
    'children' => array() 
  ),
  array(
    'post_type' => 'page',
    'post_name' => 'About Us',
    'children' => array(
      array(
        'post_type' => 'page',
        'post_name' => 'Our History',
        'children' => array() 
      )
    ) 
  )
)

Có một wp_get_nav_menu_items()hàm nhưng nó trả về một mảng 1 chiều với tất cả các mục ở cùng cấp độ, đó không phải là điều tôi muốn. WordPress có bao gồm một cách tích hợp để có được một mảng nhiều chiều cho các mục menu của tôi không? Nếu không, cách tốt nhất để có được wp_get_nav_menu_items()cấu trúc giống như cây thành một mảng đa chiều về mặt hiệu suất là gì?


3
mảng 1 chiều đó chứa tất cả dữ liệu bạn cần để xây dựng cây nếu bạn sử dụng hàm đệ quy. đối với mỗi ID của mục menu, hãy tìm các mục menu khác có ID trùng khớp trong trường cha mẹ đối tượng, chúng sẽ là con của nó.
Milo

Tôi biết tôi có thể tạo ra một cái cây từ nó, nhưng tôi đã tự hỏi nếu đã có bất kỳ tùy chọn như vậy trong wp.
YemSalat

Trường hợp sử dụng của bạn là gì? Các Walkerlớp xử lý độ sâu của các mục menu nav sắp xếp tự động, ngay cả khi các mảng phẳng.
Matt van Andel

1
Chỉnh sửa của bạn là sai. Tôi đã chỉnh sửa lại tiêu đề (thay đổi một vài từ) Đầu ra của nav_items là một mảng phẳng, nó không phải là một cây theo bất kỳ ý nghĩa nào. Trường hợp sử dụng của tôi là - Tôi muốn các mục điều hướng như một cái cây, vì vậy tôi có thể tự mình làm điều đó với nó, mà không phải sử dụng các tóm tắt bị hỏng của WP.
YemSalat

Tôi đã làm rõ câu hỏi một chút, để làm cho nó rõ ràng hơn những gì tôi muốn.
YemSalat

Câu trả lời:


20

Vấn đề xây dựng cây từ một mảng phẳng đã được giải quyết ở đây với giải pháp đệ quy, được sửa đổi một chút:

/**
 * Modification of "Build a tree from a flat array in PHP"
 *
 * Authors: @DSkinner, @ImmortalFirefly and @SteveEdson
 *
 * @link https://stackoverflow.com/a/28429487/2078474
 */
function buildTree( array &$elements, $parentId = 0 )
{
    $branch = array();
    foreach ( $elements as &$element )
    {
        if ( $element->menu_item_parent == $parentId )
        {
            $children = buildTree( $elements, $element->ID );
            if ( $children )
                $element->wpse_children = $children;

            $branch[$element->ID] = $element;
            unset( $element );
        }
    }
    return $branch;
}

trong đó chúng tôi đã thêm wpse_childrenthuộc tính tiền tố để tránh xung đột tên.

Bây giờ chúng ta chỉ phải xác định một hàm trợ giúp đơn giản:

/**
 * Transform a navigational menu to it's tree structure
 *
 * @uses  buildTree()
 * @uses  wp_get_nav_menu_items()
 *
 * @param  String     $menud_id 
 * @return Array|null $tree 
 */
function wpse_nav_menu_2_tree( $menu_id )
{
    $items = wp_get_nav_menu_items( $menu_id );
    return  $items ? buildTree( $items, 0 ) : null;
}

Giờ đây, việc chuyển đổi một menu điều hướng thành cấu trúc cây của nó trở nên cực kỳ dễ dàng với:

$tree = wpse_nav_menu_2_tree( 'my_menu' );  // <-- Modify this to your needs!
print_r( $tree );

Đối với JSON, chúng ta chỉ cần sử dụng:

$json = json_encode( $tree );

Đối với một phiên bản hơi khác, nơi chúng tôi lựa chọn cẩn thận các thuộc tính, hãy xem phiên bản đầu tiên của câu trả lời này tại đây .

Cập nhật: Lớp Walker

Đây là một ý tưởng khá sơ sài làm thế nào chúng ta có thể cố gắng nối vào phần đệ quy của display_element()phương thức của Walkerlớp trừu tượng .

$w = new WPSE_Nav_Menu_Tree;
$args = (object) [ 'items_wrap' => '', 'depth' => 0, 'walker' => $w ];
$items = wp_get_nav_menu_items( 'my_menu' );
walk_nav_menu_tree( $items, $args->depth, $args );
print_r( $w->branch );  

đâu WPSE_Nav_Menu_Treelà phần mở rộng của Walker_Nav_Menulớp:

class WPSE_Nav_Menu_Tree extends Walker_Nav_Menu
{
   public $branch = [];

   public function display_element($element, &$children, $max_depth, $depth = 0, $args, &$output )
   {
      if( 0 == $depth )
         $this->branch[$element->ID] = $element;

      if ( isset($children[$element->ID] ) )
         $element->wpse_children = $children[$element->ID];

      parent::display_element($element, $children, $max_depth, $depth, $args, $output);
   }
}

Điều này có thể cho chúng ta một cách tiếp cận khác nếu nó hoạt động.


cảm ơn, thật thú vị và thú vị khi thấy các cách tiếp cận khác nhau để giải quyết vấn đề - bạn trông khá tuyệt vời +1. @ialocin
birgire

1
Tương tự ở đây, nhưng chúng tôi đã biết ai đã bình chọn :) Khám phá các khả năng là niềm vui! Phần còn lại thường giống như công việc lắp ráp, đó là ... cho phép nói không vui.
Nicolai

Cảm ơn, tôi đã hy vọng sẽ có một chức năng WP "bản địa" cho việc này. Tôi sẽ chờ thêm một chút để xem ai đó đăng bất kỳ giải pháp nào khác, nếu không đây sẽ là câu trả lời được chọn.
YemSalat

Tôi đã cập nhật câu trả lời bằng một cách tiếp cận khác @YemSalat
birgire

Ái chà! Điều đó làm cho tâm trí tôi quay cuồng. Tôi chưa bao giờ giao dịch với lớp Walker trước đây (tôi biết nó tồn tại) Tôi đã hy vọng sẽ có một cách hiệu quả hơn để làm điều đó với một vài truy vấn SQL, nhưng tôi thực sự không muốn vào cấu trúc db db. Bây giờ tôi thích cách tiếp cận đầu tiên của bạn trong đó nó đi xe đạp qua wp_get_nav_menu_itemsđệ quy.
YemSalat

3

Nói tóm lại, hàm dưới đây tạo ra cây đối tượng bằng cách đặt trẻ em vào một thuộc tính con mới bên trong đối tượng cha.

Mã số:

function wpse170033_nav_menu_object_tree( $nav_menu_items_array ) {
    foreach ( $nav_menu_items_array as $key => $value ) {
        $value->children = array();
        $nav_menu_items_array[ $key ] = $value;
    }

    $nav_menu_levels = array();
    $index = 0;
    if ( ! empty( $nav_menu_items_array ) ) do {
        if ( $index == 0 ) {
            foreach ( $nav_menu_items_array as $key => $obj ) {
                if ( $obj->menu_item_parent == 0 ) {
                    $nav_menu_levels[ $index ][] = $obj;
                    unset( $nav_menu_items_array[ $key ] );
                }
            }
        } else {
            foreach ( $nav_menu_items_array as $key => $obj ) {
                if ( in_array( $obj->menu_item_parent, $last_level_ids ) ) {
                    $nav_menu_levels[ $index ][] = $obj;
                    unset( $nav_menu_items_array[ $key ] );
                }
            }
        }
        $last_level_ids = wp_list_pluck( $nav_menu_levels[ $index ], 'db_id' );
        $index++;
    } while ( ! empty( $nav_menu_items_array ) );

    $nav_menu_levels_reverse = array_reverse( $nav_menu_levels );

    $nav_menu_tree_build = array();
    $index = 0;
    if ( ! empty( $nav_menu_levels_reverse ) ) do {
        if ( count( $nav_menu_levels_reverse ) == 1 ) {
            $nav_menu_tree_build = $nav_menu_levels_reverse;
        }
        $current_level = array_shift( $nav_menu_levels_reverse );
        if ( isset( $nav_menu_levels_reverse[ $index ] ) ) {
            $next_level = $nav_menu_levels_reverse[ $index ];
            foreach ( $next_level as $nkey => $nval ) {
                foreach ( $current_level as $ckey => $cval ) {
                    if ( $nval->db_id == $cval->menu_item_parent ) {
                        $nval->children[] = $cval;
                    }
                }
            }
        }
    } while ( ! empty( $nav_menu_levels_reverse ) );

    $nav_menu_object_tree = $nav_menu_tree_build[ 0 ];
    return $nav_menu_object_tree;
}

Sử dụng:

$nav_menu_items = wp_get_nav_menu_items( 'main-menu' );
wpse170033_nav_menu_object_tree( $nav_menu_items );

Đầu ra:

Array
(
 [0] => WP_Post Object
  (
   [ID] => 51
   [post_author] => 1
   [post_date] => 2015-06-26 21:13:23
   [post_date_gmt] => 2015-06-26 19:13:23
   [post_content] => 
   [post_title] => 
   [post_excerpt] => 
   [post_status] => publish
   [comment_status] => open
   [ping_status] => open
   [post_password] => 
   [post_name] => 51
   [to_ping] => 
   [pinged] => 
   [post_modified] => 2015-07-29 20:55:10
   [post_modified_gmt] => 2015-07-29 18:55:10
   [post_content_filtered] => 
   [post_parent] => 0
   [guid] => http://example.com/?p=51
   [menu_order] => 1
   [post_type] => nav_menu_item
   [post_mime_type] => 
   [comment_count] => 0
   [filter] => raw
   [db_id] => 51
   [menu_item_parent] => 0
   [object_id] => 2
   [object] => page
   [type] => post_type
   [type_label] => Page
   [url] => http://example.com/example-page/
   [title] => Example-Page-1
   [target] => 
   [attr_title] => 
   [description] => 
   [classes] => Array
    (
     [0] => 
    )
   [xfn] => 
   [children] => Array
    (
     [0] => WP_Post Object
      (
       [ID] => 80
       [post_author] => 1
       [post_date] => 2015-06-27 14:03:31
       [post_date_gmt] => 2015-06-27 12:03:31
       [post_content] => 
       [post_title] => 
       [post_excerpt] => 
       [post_status] => publish
       [comment_status] => open
       [ping_status] => open
       [post_password] => 
       [post_name] => 80
       [to_ping] => 
       [pinged] => 
       [post_modified] => 2015-07-29 20:55:10
       [post_modified_gmt] => 2015-07-29 18:55:10
       [post_content_filtered] => 
       [post_parent] => 2
       [guid] => http://example.com/?p=80
       [menu_order] => 2
       [post_type] => nav_menu_item
       [post_mime_type] => 
       [comment_count] => 0
       [filter] => raw
       [db_id] => 80
       [menu_item_parent] => 51
       [object_id] => 69
       [object] => page
       [type] => post_type
       [type_label] => Page
       [url] => http://example.com/example-page/subpage-1/
       [title] => Subpage-1
       [target] => 
       [attr_title] => 
       [description] => 
       [classes] => Array
        (
         [0] => 
        )
       [xfn] => 
       [children] => Array
        (
        )
      )
    )
  )
 [1] => WP_Post Object
  (
   [ID] => 49
   [post_author] => 1
   [post_date] => 2015-06-26 21:13:23
   [post_date_gmt] => 2015-06-26 19:13:23
   [post_content] => 
   [post_title] => 
   [post_excerpt] => 
   [post_status] => publish
   [comment_status] => open
   [ping_status] => open
   [post_password] => 
   [post_name] => 49
   [to_ping] => 
   [pinged] => 
   [post_modified] => 2015-07-29 20:55:10
   [post_modified_gmt] => 2015-07-29 18:55:10
   [post_content_filtered] => 
   [post_parent] => 0
   [guid] => http://example.com/?p=49
   [menu_order] => 3
   [post_type] => nav_menu_item
   [post_mime_type] => 
   [comment_count] => 0
   [filter] => raw
   [db_id] => 49
   [menu_item_parent] => 0
   [object_id] => 41
   [object] => page
   [type] => post_type
   [type_label] => Page
   [url] => http://example.com/example-page-2/
   [title] => Example-Page-2
   [target] => 
   [attr_title] => 
   [description] => 
   [classes] => Array
    (
     [0] => 
    )
   [xfn] => 
   [children] => Array
    (
    )
  )
 [2] => WP_Post Object
  (
   [ID] => 48
   [post_author] => 1
   [post_date] => 2015-06-26 21:13:23
   [post_date_gmt] => 2015-06-26 19:13:23
   [post_content] => 
   [post_title] => 
   [post_excerpt] => 
   [post_status] => publish
   [comment_status] => open
   [ping_status] => open
   [post_password] => 
   [post_name] => 48
   [to_ping] => 
   [pinged] => 
   [post_modified] => 2015-07-29 20:55:10
   [post_modified_gmt] => 2015-07-29 18:55:10
   [post_content_filtered] => 
   [post_parent] => 0
   [guid] => http://example.com/?p=48
   [menu_order] => 4
   [post_type] => nav_menu_item
   [post_mime_type] => 
   [comment_count] => 0
   [filter] => raw
   [db_id] => 48
   [menu_item_parent] => 0
   [object_id] => 42
   [object] => page
   [type] => post_type
   [type_label] => Page
   [url] => http://example.com/example-page-3/
   [title] => Example-Page-3
   [target] => 
   [attr_title] => 
   [description] => 
   [classes] => Array
    (
     [0] => 
    )
   [xfn] => 
   [children] => Array
    (
     [0] => WP_Post Object
      (
       [ID] => 79
       [post_author] => 1
       [post_date] => 2015-06-27 14:03:31
       [post_date_gmt] => 2015-06-27 12:03:31
       [post_content] => 
       [post_title] => 
       [post_excerpt] => 
       [post_status] => publish
       [comment_status] => open
       [ping_status] => open
       [post_password] => 
       [post_name] => 79
       [to_ping] => 
       [pinged] => 
       [post_modified] => 2015-07-29 20:55:10
       [post_modified_gmt] => 2015-07-29 18:55:10
       [post_content_filtered] => 
       [post_parent] => 42
       [guid] => http://example.com/?p=79
       [menu_order] => 5
       [post_type] => nav_menu_item
       [post_mime_type] => 
       [comment_count] => 0
       [filter] => raw
       [db_id] => 79
       [menu_item_parent] => 48
       [object_id] => 70
       [object] => page
       [type] => post_type
       [type_label] => Page
       [url] => http://example.com/example-page-3/subpage-2/
       [title] => Subpage-2
       [target] => 
       [attr_title] => 
       [description] => 
       [classes] => Array
        (
         [0] => 
        )
       [xfn] => 
       [children] => Array
        (
         [0] => WP_Post Object
          (
           [ID] => 78
           [post_author] => 1
           [post_date] => 2015-06-27 14:03:31
           [post_date_gmt] => 2015-06-27 12:03:31
           [post_content] => 
           [post_title] => 
           [post_excerpt] => 
           [post_status] => publish
           [comment_status] => open
           [ping_status] => open
           [post_password] => 
           [post_name] => 78
           [to_ping] => 
           [pinged] => 
           [post_modified] => 2015-07-29 20:55:10
           [post_modified_gmt] => 2015-07-29 18:55:10
           [post_content_filtered] => 
           [post_parent] => 70
           [guid] => http://example.com/?p=78
           [menu_order] => 6
           [post_type] => nav_menu_item
           [post_mime_type] => 
           [comment_count] => 0
           [filter] => raw
           [db_id] => 78
           [menu_item_parent] => 79
           [object_id] => 76
           [object] => page
           [type] => post_type
           [type_label] => Page
           [url] => http://example.com/example-page-3/subpage-2/subpage-3/
           [title] => Subpage-3
           [target] => 
           [attr_title] => 
           [description] => 
           [classes] => Array
            (
             [0] => 
            )
           [xfn] => 
           [children] => Array
            (
             [0] => WP_Post Object
              (
               [ID] => 87
               [post_author] => 1
               [post_date] => 2015-06-27 15:27:08
               [post_date_gmt] => 2015-06-27 13:27:08
               [post_content] => 
               [post_title] => 
               [post_excerpt] => 
               [post_status] => publish
               [comment_status] => open
               [ping_status] => open
               [post_password] => 
               [post_name] => 87
               [to_ping] => 
               [pinged] => 
               [post_modified] => 2015-07-29 20:55:10
               [post_modified_gmt] => 2015-07-29 18:55:10
               [post_content_filtered] => 
               [post_parent] => 76
               [guid] => http://example.com/?p=87
               [menu_order] => 7
               [post_type] => nav_menu_item
               [post_mime_type] => 
               [comment_count] => 0
               [filter] => raw
               [db_id] => 87
               [menu_item_parent] => 78
               [object_id] => 85
               [object] => page
               [type] => post_type
               [type_label] => Page
               [url] => http://example.com/example-page-3/subpage-2/subpage-3/subpage-4/
               [title] => Subpage-4
               [target] => 
               [attr_title] => 
               [description] => 
               [classes] => Array
                (
                 [0] => 
                )
               [xfn] => 
               [children] => Array
                (
                 [0] => WP_Post Object
                  (
                   [ID] => 366
                   [post_author] => 1
                   [post_date] => 2015-07-29 20:52:46
                   [post_date_gmt] => 2015-07-29 18:52:46
                   [post_content] => 
                   [post_title] => 
                   [post_excerpt] => 
                   [post_status] => publish
                   [comment_status] => open
                   [ping_status] => open
                   [post_password] => 
                   [post_name] => 366
                   [to_ping] => 
                   [pinged] => 
                   [post_modified] => 2015-07-29 20:55:10
                   [post_modified_gmt] => 2015-07-29 18:55:10
                   [post_content_filtered] => 
                   [post_parent] => 85
                   [guid] => http://example.com/?p=366
                   [menu_order] => 8
                   [post_type] => nav_menu_item
                   [post_mime_type] => 
                   [comment_count] => 0
                   [filter] => raw
                   [db_id] => 366
                   [menu_item_parent] => 87
                   [object_id] => 112
                   [object] => page
                   [type] => post_type
                   [type_label] => Page
                   [url] => http://example.com/example-page-3/subpage-2/subpage-3/subpage-4/subpage-5/
                   [title] => Subpage-5
                   [target] => 
                   [attr_title] => 
                   [description] => 
                   [classes] => Array
                    (
                     [0] => 
                    )
                   [xfn] => 
                   [children] => Array
                    (
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)

Một cấu trúc giống như cây trong WordPress không phải là một mảng nhiều chiều. Nó là một mảng các đối tượng với thông tin cha mẹ.
Matt van Andel

Đã thử khoảng 10 giải pháp khác nhau cho vấn đề này. Cảm ơn bạn vì giải pháp tuyệt vời này, nó giữ cho nó trong một cấu trúc WP Object đẹp. Điều này cần phải được chấp nhận thực sự!
Johan Pretorius

@JohanPretorius Cảm ơn và niềm vui của tôi. Mọi người đang tìm kiếm những thứ khác nhau. Tôi giả sử OP tìm thấy câu trả lời khác hữu ích hơn. Tất cả đều tốt.
Nicolai

1

Phiên bản sửa đổi của câu trả lời được chấp nhận trong đó xem xét menu_ordertính chất của các mục menu để giữ đúng thứ tự của mảng phẳng ban đầu. menu_orderđược thiết lập tự động bởi WordPress nên không cần kiểm tra bất cứ điều gì:

function buildTree(array &$flatNav, $parentId = 0) {
    $branch = [];

    foreach ($flatNav as &$navItem) {
      if($navItem->menu_item_parent == $parentId) {
        $children = buildTree($flatNav, $navItem->ID);
        if($children) {
          $navItem->children = $children;
        }

        $branch[$navItem->menu_order] = $navItem;
        unset($navItem);
      }
    }

    return $branch;
}

Sử dụng:

// get navs
$locations = get_nav_menu_locations();

// get menu items by menu name
$flatMainNav = wp_get_nav_menu_items($locations['main']);
$mainNav = buildTree($flatMainNav);

-2

Có thể có một sự hiểu lầm ở đây về các mục menu điều hướng WordPress là các cấu trúc giống như cây.

Các cấu trúc giống như cây trong WordPress KHÔNG PHẢI LÀ NHIỀU ARRAYS!

Lưu ý rằng mặc dù mảng các mục trình đơn được trả về là phẳng, nó vẫn là một cấu trúc giống như cây bởi vì mỗi mục chứa thông tin về nguồn gốc của nó (giá trị cha là 0 nếu mục không có cha mẹ - hoặc id của mục cha mẹ nếu nó làm).

Khi bạn truyền một mảng như vậy cho Walkerlớp, nó sẽ lặp qua các kết quả và tạo hai mảng - một mảng chứa các mục cấp cao nhất và một $parent_id => array()mảng khác chứa các mục con ở định dạng trong đó mảng chứa các mục menu là phần tử con trực tiếp của phần tử đó.

Sau đó, walker lặp qua mảng các mục cấp cao nhất, xử lý mục đó và sau đó kiểm tra mảng con để xem liệu có con nào cho phần tử hiện tại không và xử lý từng mục theo cùng một cách, theo cách đệ quy.

Nếu bạn muốn biết làm thế nào để chuyển đổi cấu trúc giống như cây WordPress thành một mảng đa chiều, thì đó là một câu hỏi hoàn toàn khác (và về mặt kỹ thuật không phải là một câu hỏi WordPress). Nhưng thông tin được trả về wp_get_nav_menu_items() một cấu trúc giống như cây ... và bạn có thể sử dụng nguyên trạng Walkerđể xử lý nó.

Nếu bạn muốn xem mã chính xác mà lớp Walker của WordPress chạy để đi bộ mảng, hãy xem Walker-> walk () trên WordPress Trac từ các dòng 213-258 . Bạn có thể sử dụng mã đó như là để xây dựng một mảng nhiều chiều, nếu đó là những gì bạn đang theo đuổi.

Người đi bộ

WordPress được thiết kế để sử dụng Walkerlớp để xử lý các cấu trúc giống như cây. Nếu bạn chỉ đơn giản là hiển thị một menu, hoặc thực sự chỉ cần đầu ra cuối cùng, bạn có thể muốn xem xét sử dụng wp_nav_menu()để xuất ra menu của bạn

Thí dụ:

wp_nav_menu(array(
    'menu' => 6, // your menu id, name, or slug
    'echo' => true, // set this to false if you want a string back instead
    'walker' => new Your_Walker(),
));

Bạn sẽ mở rộng lớp Walker (ví dụ Your_Walker()) để có được bất kỳ đầu ra nào bạn cần. Ví dụ, xem mục này trên Codex .


2
Trong tùy chọn A, $sorted_menu_itemsvẫn là một mảng "phẳng" và đầu ra của tùy chọn B là một chuỗi.
bạch dương

Tôi nghĩ có một sự hiểu lầm về cách WordPress định nghĩa "các cấu trúc giống như cây". wp_get_nav_menu_items()trả về một cấu trúc giống như cây - nghĩa là một mảng trong đó mỗi mục chứa dữ liệu gốc. Các cấu trúc này có nghĩa là để kết xuất với một Walkerlớp. Nếu trường hợp sử dụng ở đây chỉ liên quan đến việc chuyển đổi một mảng "phẳng" thành một mảng đa chiều dựa trên dữ liệu nguồn gốc (ví dụ 'post_parent' => 123), thì câu hỏi này không phải là về WordPress về mặt kỹ thuật và nên được chuyển sang Stack Overflow.
Matt van Andel

1
Hãy nhìn xem, tôi không quan tâm WordPress định nghĩa "cấu trúc giống như cây" (Tôi không nghĩ rằng tình cảm này thậm chí có ý nghĩa) Tất cả những gì tôi quan tâm là có một mảng đa chiều, tôi có thể tự mình làm mọi thứ.
YemSalat

Bạn sẽ KHÔNG coi đó là hành vi mặc định của WordPress. Như những người khác đã nêu, bạn có tất cả thông tin bạn cần để cấu trúc lại mảng theo cách bạn muốn và tôi đã liên kết bạn với các khu vực cụ thể trong lõi WordPress để sử dụng làm tài liệu tham khảo. Đây thực sự không phải là một câu hỏi WordPress nhiều như một câu hỏi PHP. Bạn có thể sử dụng lớp Walker như hiện trạng hoặc bạn có thể sao chép các dòng có liên quan từ Walker :: walk () như tôi đã nêu, để xây dựng mảng của bạn.
Matt van Andel
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.