自定义walker_nav_menu中忽略了start_lvl


8

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

我基本上想将菜单从<ul> <li></li> </ul>结构更改为<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";
}

有谁知道为什么会这样-我错过了一些非常明显的事情吗?

5.3.6如果有帮助,我将在Apache上使用PHP运行最新版本的WordPress 。

提前致谢,

费利克斯:)


1
根据您显示的内容,所有显而易见的内容看起来都是正确的。
旅馆

Answers:


8

您的my_extended_walker类还可以,但是当您调用wp_nav_menu函数时,请使用items_wrap参数。

wp_nav_menu( array( 'items_wrap' => '<p>%3$s</p>', 'walker'=>new my_extended_walker() ) );

start_lvl用于子元素。


2
start_lvl用于子元素。您刚刚挽救了我一生的许多东西
ashutosh

3

好的,不确定当我发布此内容时我读错了什么,但是您的整个班级应该是这样的:

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>在其中放置标签。您可能会获得无效的标记。


嗨,是的,我完成了以下完整课程,
fenfe1 2012年

类BB_Nav_Footer_Walker扩展了Walker_Nav_Menu { }函数end_lvl(&$ output,$ depth = 0,$ args = array()){$ output。=“ \ n </ p> \ n”; }
fenfe1 2012年

我尝试使用<div>而不是<p>仅仅查看是否可以让这些功能执行任何操作,但到目前为止没有任何乐趣:(
fenfe1 2012年

<div><p>不应该打破沃克,但可能会导致无效的标记。你有$output =,而不是$output .=在你的start_lvl。那可能会造成麻烦。那是您发布的完整的Walker吗?
s_ha_dum 2012年

嗨,是我定的.=位,这是现在完整的类(我删除了start_lvl()end_lvl()功能,看看他们做了一个差异) - pastebin.com/zfcBxHd8
fenfe1

2

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

示例::构建简单菜单列表

    // 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.