2016-01-13 3 views
0

Мне нужно добавить элементы через функцию в конкретное подменю, как я могу это сделать? Я сделал быстрый этюд, чтобы показать, что мне нужно, спасибо за любую помощь!Wordpress: Добавить элемент в подменю

Эскиз:

add_filter('wp_nav_menu_items','specialprojekte_in_projekte_submenu', 10, 2); 
function specialprojekte_in_projekte_submenu($items, $args) { 
    if(???SUBMENU == PROJECTS ???)   
     $items .="<li> this is a special project at the end of projects submenu </li>";   
    } 
    return $items; 
} 
+0

Можете ли вы описать, что структура меню вы хотите достичь? Вы хотите добавить этот новый элемент в качестве подменю в меню или в качестве подменю в подменю ... – pgk

+0

использовать пользовательский класс walker вместо .. более легко добавить –

+0

Я хочу добавить этот новый элемент в существующий subemenu ... – buckdanny

ответ

0

Если вы хотите использовать фильтр, чтобы изменить меню, фильтр в ведьму должны зацепить это 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

+0

Спасибо большое за эту выдающуюся помощь! – buckdanny

Смежные вопросы