自定义导航漫游:如何访问$args参数?

时间:2014-12-19 作者:Sven

我正在创建一个自定义导航助行器。我注意到WordPress core中的nav walker类写得相当粗糙,很多东西都可以通过各种方法传播,所以我想尝试一下。

目前,我想知道如何获得$args (包含传递给不同方法的参数)构造函数中的参数?

仔细看一下,这里有一个过滤器wp_nav_menu_args (source) 这可以用在下面的示例片段中,但我想知道是否有其他方法可以获得它:

 class My_Custom_Walker extends Walker_Nav_Menu {

    public function __construct() {
        $args = add_action(\'wp_nav_menu_args\', array($this, \'get_the_args\'));
    }

    public function get_the_args($args) {
        return $args;
    }

    […]
A few lines above the filter, 可能是第一次出现$args, 但它真的是以我只能使用过滤器访问的方式编写的吗?

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

WordPress Walker没有使用构造函数。他们是从walk() 作为第三个参数传递参数的方法(令人困惑的是,它没有反映在方法签名中)。

您可以通过以下方式将其捕获到对象的属性中:

class Args_Walker extends Walker {

    public function walk( $elements, $max_depth ) {

        // we could declare above, but would get incompatible signature
        $args = func_get_arg(2);

        $this->args = $args;

        return parent::walk( $elements, $max_depth, $args );
    }
}

结束