Для сайта wordpress, который я разрабатываю, я создаю динамическое меню, которое пользователи могут использовать с помощью меню администратора. Присоединение к этому - это только наименьшая из моих проблем.Изменение коллекции PHP
код я использую возвращает эти массивы:
Array
(
[0] => WP_Post Object
(
[ID] => 35
[post_author] => 1
[post_date] => 2013-05-19 15:46:22
[post_date_gmt] => 2013-05-19 15:46:22
[post_content] =>
[post_title] =>
[post_excerpt] =>
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_password] =>
[post_name] => 35
[to_ping] =>
[pinged] =>
[post_modified] => 2013-05-19 16:07:09
[post_modified_gmt] => 2013-05-19 16:07:09
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://adapt.local/?p=35
[menu_order] => 1
[post_type] => nav_menu_item
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
[db_id] => 35
[menu_item_parent] => 0
[object_id] => 32
[object] => training
[type] => post_type
[type_label] => Training
[url] => http://adapt.local/training/alcohol/
[title] => Alcohol
[target] =>
[attr_title] =>
[description] =>
[classes] => Array
(
[0] =>
)
[xfn] =>
)
[1] => WP_Post Object
(
[ID] => 36
[post_author] => 1
[post_date] => 2013-05-19 16:07:09
[post_date_gmt] => 2013-05-19 16:07:09
[post_content] =>
[post_title] =>
[post_excerpt] =>
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_password] =>
[post_name] => 36
[to_ping] =>
[pinged] =>
[post_modified] => 2013-05-19 16:07:09
[post_modified_gmt] => 2013-05-19 16:07:09
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://adapt.local/?p=36
[menu_order] => 2
[post_type] => nav_menu_item
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
[db_id] => 36
[menu_item_parent] => 35
[object_id] => 32
[object] => training
[type] => post_type
[type_label] => Training
[url] => http://adapt.local/training/alcohol/
[title] => Alcohol
[target] =>
[attr_title] =>
[description] =>
[classes] => Array
(
[0] =>
)
[xfn] =>
)
)
Чтобы объяснить: если menu_item_parent = 0, что означает, что он является одним из главных узлов, и если menu_item_parent> 0, это означает, что она является " подузел.
Я хочу, чтобы преобразовать этот ужасный массив к чему-то более полезное, предпочтительно что-то вроде этого
Array
(
[35] => Array
(
name => "Topnode"
url => "http://topnodeurl"
items => Array
(
name => "Subnode"
url => "http://subnodeurl"
)
)
)
Я подумал: Эй, это не может быть так сложно. Но, по-видимому, это, похоже, не работает:
foreach($menuitems as $menuitem) {
if(!$menuitem->menu_item_parent) {
$items[$menuitem->ID] = array("name" => $menuitem->title,"items" => array());
#print_r($items);
}
else {
$parent = $items[$menuitem->menu_item_parent]['items'];
$parent = array("name" => $menuitem->title, "url" => $menuitem->url);
}
}
Любые идеи?
Как это будет работать? Я не верю, что $ items ['childs'] будет делать что-то, поскольку рекурсивная функция ничего не возвращает? –
Извините, что я плохо забыл вернуть меню – MKroeders
Отлично! Кажется, это делает работу. Теперь я не должен беспокоиться обо всех «дополнительных данных». Это просто все. –