我正在创建一个自定义导航助行器。我注意到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
, 但它真的是以我只能使用过滤器访问的方式编写的吗?
最合适的回答,由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 );
}
}