2017-01-23 3 views
0

Я работаю на этом сайте здесь: http://new.leicesterymca.co.uk/youth-community/our-work/Показывать только меню третьего уровня Wordpress

На этой странице вы увидите меня в меню 1-го уровня в верхней части, то я PHP код говоря, если есть второй затем отобразите меню 2-го уровня в синей полосе.

Но теперь мне нужно то же самое для меню 3-го уровня (слева от страницы). Так что, по сути, мне нужен код, чтобы увидеть, есть ли какие-либо страницы третьего уровня, если это так, то здесь отображаются страницы третьего уровня. Код у меня есть для второго уровня:

<?php 
    $menu = wp_nav_menu(
     array (
     'theme_location' => 'header-menu', 
     'sub_menu' => true, 
     'echo' => FALSE, 
     'fallback_cb' => '__return_false' 
    ) 
); 
    if (! empty ($menu)) 
    { 
    echo '<div class="sub-nav-container-full"> 
      <div class="container"> 
      <div class="sub-page-menu">'; 
    echo $menu; 
    echo '</div></div></div>'; 
    } 
?> 

Итак, я предполагаю, что я могу использовать подобный код, но я не знаю, как направить его только на 3-м уровне?

Если бы кто-нибудь мог помочь, это было бы здорово! :)

Спасибо, Шон.

EXTRA - У меня тоже есть этот кусок кода в файле мои функции, если это помогает ...

// FUNCTION FOR SETTING UP SUB MENU PAGES 

// add hook 
add_filter('wp_nav_menu_objects', 'my_wp_nav_menu_objects_sub_menu', 10, 2); 

// filter_hook function to react on sub_menu flag 
function my_wp_nav_menu_objects_sub_menu($sorted_menu_items, $args) { 
    if (isset($args->sub_menu)) { 
    $root_id = 0; 

// find the current menu item 
foreach ($sorted_menu_items as $menu_item) { 
    if ($menu_item->current) { 
    // set the root id based on whether the current menu item has a parent or not 
    $root_id = ($menu_item->menu_item_parent) ? $menu_item->menu_item_parent : $menu_item->ID; 
    break; 
    } 
} 

// find the top level parent 
if (! isset($args->direct_parent)) { 
    $prev_root_id = $root_id; 
    while ($prev_root_id != 0) { 
    foreach ($sorted_menu_items as $menu_item) { 
     if ($menu_item->ID == $prev_root_id) { 
     $prev_root_id = $menu_item->menu_item_parent; 
     // don't set the root_id to 0 if we've reached the top of the menu 
     if ($prev_root_id != 0) $root_id = $menu_item->menu_item_parent; 
     break; 
     } 
    } 
    } 
} 

$menu_item_parents = array(); 
foreach ($sorted_menu_items as $key => $item) { 
    // init menu_item_parents 
    if ($item->ID == $root_id) $menu_item_parents[] = $item->ID; 

    if (in_array($item->menu_item_parent, $menu_item_parents)) { 
    // part of sub-tree: keep! 
    $menu_item_parents[] = $item->ID; 
    } else if (! (isset($args->show_parent) && in_array($item->ID, $menu_item_parents))) { 
    // not part of sub-tree: away with it! 
    unset($sorted_menu_items[$key]); 
    } 
} 

return $sorted_menu_items; 
    } else { 
return $sorted_menu_items; 
    } 
} 
+0

Другими словами, вы хотите, чтобы показать меню 3-го уровня, когда показал второй уровень/парил? – codiiv

+0

Я так думаю - я хочу, чтобы меню третьего уровня было тем, кто в этой позиции (в левой части страницы), когда он есть, и когда вы нажали на родительское меню второго уровня .... Это имеет смысл? –

ответ

0

Кажется, что ваш вопрос похож на этот, и я думаю, что вы можете получить эту работу для вас также !

https://wordpress.stackexchange.com/questions/45161/3-level-deep-navigation-menu-not-showing-all-levels

+0

Я не думаю, что это одно и то же: мое меню показывает все уровни правильно при наведении, но я просто хочу, чтобы он показывал только 3-й уровень подменю. Это показывает мне, как включить отображение всех уровней, особенно при использовании темы Roots ... –