自定义Walker_NAV_MENU中忽略了START_LVEL

时间:2012-11-15 作者:fenfe1

这是我第一个涉及WordPress的项目,我一直在尝试为页脚菜单创建自定义walker。

我基本上想从<ul> <li></li> </ul> 结构到a<p> <span></span> </p> 结构

菜单和内容正在显示文件,我可以调整start_elend_el 函数没有问题,因此我现在得到以下结果:

<ul> <span>*link*</span> <span>*link*</span> </ul>

这显然是一半,我已经写了start_lvl()end_lvl() 标签如下所示,但它们被WordPress忽略了-我没有在其中添加任何内容(甚至die()) 执行(这有点可疑),但我知道调用该类是因为start_el() 作用

function start_lvl(&$output, $depth = 0, $args = array()) {
    $output = "\\n<p class=\\"sub-menu\\">\\n";
}

function end_lvl(&$output, $depth = 0, $args = array()) {
    $output .= "\\n</p>\\n";
}
有人知道为什么会这样吗?我是否错过了一些非常明显的事情!?

我正在用PHP在Apache上运行最新版本的WordPress5.3.6 如果有帮助的话。

提前感谢,

费利克斯:)

3 个回复
SO网友:stillatmylinux

您的my\\u extended\\u walker类还可以,但当您调用wp_nav_menu 函数使用items_wrap 参数

wp_nav_menu( array( \'items_wrap\' => \'<p>%3$s</p>\', \'walker\'=>new my_extended_walker() ) );
start\\u lvl用于子元素。

SO网友:s_ha_dum

好吧,我不确定我发布这篇文章时读错了什么,但你的整个班级应该是这样的:

class my_extended_walker extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\\n<p class=\\"sub-menu\\">\\n";
    }

    function end_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\\n</p>\\n";
    }
}
然后在调用时将“walker”作为参数传递wp_nav_menu

wp_nav_menu( array( \'walker\'=>new my_extended_walker() ) );

如果你做到了,你会没事的。我正在研究能够做到这一点的工作代码。我不知道<p> 但标签在那里。您可能会得到无效的标记。

SO网友:Michael Ecklund

您是否想过使用内置功能获取所有导航菜单项:wp_get_nav_menu_items(); 手动输出内容?

Example :: Building simple menu list

    // Get the nav menu based on $menu_name (same as \'theme_location\' or \'menu\' arg to wp_nav_menu)
    // This code based on wp_nav_menu\'s code to get Menu ID from menu slug

    $menu_name = \'custom_menu_slug\';

    if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

    $menu_items = wp_get_nav_menu_items($menu->term_id);

    $menu_list = \'<ul id="menu-\' . $menu_name . \'">\';

    foreach ( (array) $menu_items as $key => $menu_item ) {
        $title = $menu_item->title;
        $url = $menu_item->url;
        $menu_list .= \'<li><a href="\' . $url . \'">\' . $title . \'</a></li>\';
    }
    $menu_list .= \'</ul>\';
    } else {
    $menu_list = \'<ul><li>Menu "\' . $menu_name . \'" not defined.</li></ul>\';
    }
    // $menu_list now ready to output

结束