修改SUB_MENU函数以在特定设置的页面下方显示页面

时间:2015-02-12 作者:JacobTheDev

我有一个函数wp_nav_menu 显示当前查看页面的同级页面以及所有子页面。我需要对此进行修改,以仅显示特定页面的子页面,但我真的不明白这是如何工作的。我想做的是在wp_nav_menu 函数,并仅显示该页的子级。

这是我当前的函数:。

// add sub_menu options to wp_nav_menu
function my_wp_nav_menu_objects_sub_menu($sorted_menu_items, $args) {
    if (isset($args->sub_menu)) {
        $root_id = 0;
        foreach ($sorted_menu_items as $menu_item) {
            if ($menu_item->current) {
                $root_id = ($menu_item->menu_item_parent) ? $menu_item->menu_item_parent : $menu_item->ID;
                break;
            }
        }
        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;
                        if ($prev_root_id != 0) $root_id = $menu_item->menu_item_parent;
                        break;
                    } 
                }
            }
        }
        $menu_item_parents = array();
        foreach ($sorted_menu_items as $key => $item) {
            if ($item->ID == $root_id) $menu_item_parents[] = $item->ID;

            if (in_array($item->menu_item_parent, $menu_item_parents)) {
                $menu_item_parents[] = $item->ID;
            } else if (!( isset($args->show_parent) && in_array($item->ID, $menu_item_parents))) {
                unset( $sorted_menu_items[$key]);
            }
        }
        return $sorted_menu_items;
    } else {
        return $sorted_menu_items;
    }
}
add_filter("wp_nav_menu_objects", "my_wp_nav_menu_objects_sub_menu", 10, 2);
下面是一个示例wp_nav_menu 与it的关联:

wp_nav_menu(array(
    "container"      => "nav",
    "depth"          => 2,
    "items_wrap"     => "<ul>%3\\$s</ul>",
    "sub_menu"       => true,
    "theme_location" => "primary",
));
任何帮助都将不胜感激。

1 个回复
SO网友:ngearing

要专门针对某个页面并显示其子级/同级,可以使用wp\\u list\\u pages();

例如:。

wp_list_pages(array(
    \'child_of\' => "page parent ID",
    \'depth\' => 2
));

结束

相关推荐

Wordpress breadcrumb depth

我目前正在使用下面的代码显示我的面包屑。这在一定程度上是可行的。我想要的是:主页>级别1>级别2>级别3我得到的是:主页>级别1>级别3它显示的是一位家长,所以只要你最深的链接是2级链接,你就无法区分两者之间的区别。但你知道,对于复杂的网站来说,这还不够。欢迎就如何调整此代码以包括所有家长提出建议。代码:function themename_breadcrumb() { global $post; echo \'<