2013-10-07 2 views
0

ЦельКак направить меню верхнего уровня на меню второго уровня и иметь меню верхнего уровня с уникальным именем?

В Wordpress, я пытаюсь иметь администратор меню автоматически создавать, если они находятся в меню из «Внешнего вида -> меню». Это я смог развить.

Часть, в которой у меня возникают проблемы, обусловлена ​​ее спецификой. Я пытаюсь иметь меню верхнего уровня прямо на меню второго уровня И есть меню верхнего уровня сохранить свое первоначальное название.

Код

Настройка в разделе "Внешний вид -> меню"

Callsigns 
    -> Alpha 
    -> Bravo 
    -> Charlie 

меню верхнего уровня "позывные" изменил параметры. The Навигационная этикетка является "Alpha" и не указан Титул: Атрибут - "Callsigns".

functions.php

add_action('init', 'register_my_menus'); 
function register_my_menus() { 
    register_nav_menus(array('admin-menus' => 'Admin Menus')); 
} 

add_action('admin_menu', 'my_admin_menus'); 
function my_admin_menus() { 
    $locations = get_nav_menu_locations(); 
    $menu = wp_get_nav_menu_object($locations['admin-menus']); 
    $pages = wp_get_nav_menu_items($menu->term_id); 

    foreach ($pages as $page) { 
     if ($page->menu_item_parent == 0) 
      add_menu_page(
       $page->title, 
       $page->attr_title ? $page->attr_title : $page->title, 
       'read', 
       sanitize_title($page->title), 
       'admin_page_format' 
      ); 
     else 
      add_submenu_page(
       sanitize_title($page->menu_item_parent->title),  // ISSUE 
       $page->title, 
       $page->attr_title ? $page->attr_title : $page->title, 
       'read', 
       sanitize_title($page->title), 
       'admin_page_format' 
      ); 
    } 
} 

Я пометил линия которой я довольно уверен, это вопрос. Первоначально я не пытался использовать «->», и на данный момент я достаточно уверен, что невозможно использовать «->» дважды подряд, как я делал выше.

Неверные решения

sanitize_title($page->menu_item_parent->title) 

меню верхнего уровня работы. Он имеет правильное имя и направляет правильное меню второго уровня. Тем не менее, меню второго уровня вообще не отображаются в качестве меню администратора.

sanitize_title(get_the_title($page->menu_item_parent)) 

Тот же результат, что и выше, неправильное решение.

ответ

0

functions.php

add_action('init', 'register_my_menus'); 
function register_my_menus() { 
    register_nav_menus(array('admin-menus' => 'Admin Menus')); 
} 

add_action('admin_menu', 'my_admin_menus'); 
function my_admin_menus() { 
    $locations = get_nav_menu_locations(); 
    $menu = wp_get_nav_menu_object($locations['admin-menus']); 
    $pages = wp_get_nav_menu_items($menu->term_id); 

    function get_menu_page($pages, $id) { 
     foreach ($pages as $page) 
      if ($page->ID == $id) return $page; 
    } 

    foreach ($pages as $page) { 
     if ($page->menu_item_parent == 0) 
      add_menu_page(
       $page->title, 
       $page->attr_title ? $page->attr_title : $page->title, 
       'read', 
       sanitize_title($page->title), 
       'admin_page_format' 
      ); 
     else 
      add_submenu_page(
       sanitize_title(get_menu_page($pages, $page->menu_item_parent)->title), 
       $page->title, 
       $page->attr_title ? $page->attr_title : $page->title, 
       'read', 
       sanitize_title($page->title), 
       'admin_page_format' 
      ); 
    } 
} 

Решение было создать функцию, которая пошла Loop в меню еще раз, чтобы вернуть объект страницы.

Я сомневаюсь, что это самый чистый путь, но это единственное, что я мог придумать.

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