Если вы хотите использовать фильтр, чтобы изменить меню, фильтр в ведьму должны зацепить это wp_get_nav_menu_items
add_filter('wp_nav_menu_items','specialprojekte_in_projekte_submenu', 10, 2);
В этом крюке первый параметр дает вам все элементы меню как массив. Каждый элемент меню WP_Post_Object
со свойствами:
WP_Post Object
(
[ID] => 6
[post_author] => "1"
[post_date] => "2015-12-06 19:07:48"
[post_date_gmt] => "2015-12-06 17:07:48"
[post_content] => ""
[post_title] => "Post Title"
[post_excerpt] => ""
[post_status] => "publish"
[comment_status] => "closed"
[ping_status] => "closed"
[post_password] => ""
[post_name] => "221"
[to_ping] => ""
[pinged] => ""
[post_modified] => "2016-01-13 14:05:51"
[post_modified_gmt] => "2016-01-13 12:05:51"
[post_content_filtered] => ""
[post_parent] => "220"
[guid] => "http://yoursite.dev/?p=6"
[menu_order] => 1
[post_type] => "nav_menu_item"
[post_mime_type] => ""
[comment_count] => "0"
[filter] => raw
[db_id] => 6
[menu_item_parent] => "5"
[object_id] => "6"
[object] => "custom"
[type] => "custom"
[type_label] => "Menu Label"
[title] => "First Submenu Item"
[url] => "http://yoursite.dev/"
[target] => ""
[attr_title] => ""
[description] => ""
[classes] => Array
[xfn] => ""
)
Таким образом, вы можете использовать все эти свойства, чтобы выбрать меню или подменю, на котором вы хотите добавить новый элемент. Обратите внимание: если в меню есть "menu_item_parent" <> 0
, то это подменю.
Затем необходимо создать объект подменю:
function specialprojekte_in_projekte_submenu($items, $menu) {
$menu_cnt = count($items) + 1;
//find parent menu item, in witch we wont to append our new menu
$parent_id = 0;
foreach ($items as $item) {
//one possible argument to find what you need
if ($item->menu_item_parent === "201") {
$parent_id = $item->ID;
break;
}
}
$items[] = (object) array(
'ID' => $menu_cnt + 100000, // Some big ID that WP can not use
'title' => 'My new submenu',
'url' => '#',
'menu_item_parent' => $parent_id,
'menu_order' => $menu_cnt,
// These are not necessary, but PHP throws warning if they dont present
'type' => '',
'object' => '',
'object_id' => '',
'db_id' => '',
'classes' => '',
'post_title' => '',
);
return $items;
}
И, конечно, вы можете использовать Walker_Nav_Menu
класс Codex
Можете ли вы описать, что структура меню вы хотите достичь? Вы хотите добавить этот новый элемент в качестве подменю в меню или в качестве подменю в подменю ... – pgk
использовать пользовательский класс walker вместо .. более легко добавить –
Я хочу добавить этот новый элемент в существующий subemenu ... – buckdanny