在Nav_Walker中获取当前菜单位置

时间:2019-09-19 作者:admcfajn

如何检索当前菜单位置(注册于register_nav_menus) 从导航助行器类内部?

例如:

<?php

class Special_Nav_Walker extends Walker_Nav_Menu {

    // How can I get `special_menu` here, when the walker is applied to the menu (see below)

}

wp_nav_menu(
    [
        \'theme_location\'    => \'special_menu\',
        \'walker\'            => new Special_Nav_Walker(),
    ]
);

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

没有构造函数,因此它不能作为类的属性使用,但类中的每个方法都接收传递给的参数wp_nav_menu() 作为对象。例如start_lvl():

/**
 * Starts the list before the elements are added.
 *
 * @since 3.0.0
 *
 * @see Walker::start_lvl()
 *
 * @param string   $output Used to append additional content (passed by reference).
 * @param int      $depth  Depth of menu item. Used for padding.
 * @param stdClass $args   An object of wp_nav_menu() arguments.
 */
public function start_lvl( &$output, $depth = 0, $args = array() ) {
    if ( \'special_menu\' === $args->theme_location ) {
        // Do something.
    }
}
是,默认值为$args 是一个数组,但出于某种原因,导航漫游器将其作为对象接收。

其他方法也使参数可用,但不一定作为第三个参数。您需要查看将哪些参数传递给每个方法,但无论如何在扩展类时都需要这样做。

相关推荐

Sub Menus will not work

我急需帮助。我尽了我所知的一切努力将我的子菜单恢复到我的网站上。我安装了一个元滑块插件,在我的主页上获得一个滑块。它工作得很好,然后,我的子菜单停止工作!然后我停用了插件,认为这就是导致它的原因,子菜单仍然没有显示在我的网站上。我不确定我是否丢失了代码或什么,但我将非常感谢能得到的任何帮助。我也有海明威的主题,不确定这是否有什么关系。