Wordpress walker 调用父 walk() 方法
Wordpress walker call parent walk() method
在扩展基础 Walker 时 class 我需要扩展 walk()
方法。
但是,调用父 walk()
方法没有结果。
这些是我尝试过的方法:
public function walk($elements, $max_depth) {
parent::walk($elements, $max_depth);
}
public function walk($elements, $max_depth) {
$parent_class=get_parent_class($this);
$args = array($elements, $max_depth);
call_user_func_array(array($parent_class, 'walk'), $args);
}
在我看来,一旦我重写 walk()
事情就坏了。
这个方法是否应该return一些具体的值?
我应该以不同的方式调用父方法吗?
Walker::walk
将 return 遍历操作产生的字符串。
您将得到的是使用 Walker::display_element
、Walker::start_lvl
、Walker::start_el
等方法创建的文本...
你将从父方法中得到的已经是 HTML 代码可能很难在第二次以正确的方式修改,但如果你真的想这样做:
public function walk($elements, $max_depth) {
$html = parent::walk($elements, $max_depth);
/* Do something with the HTML output */
return $html;
}
正如@TheFallen 在评论中指出的那样,Wordpress 的 class Walker 返回一个输出
// Extracted from WordPress\wp-includes\class-wp-walker.php
public function walk( $elements, $max_depth ) {
$args = array_slice(func_get_args(), 2);
$output = '';
//invalid parameter or nothing to walk
if ( $max_depth < -1 || empty( $elements ) ) {
return $output;
}
...
因此,如果您想扩展 class 并覆盖该方法,您必须保持原始行为,同时返回输出。我的建议:
class Extended_Walker extends Walker {
public function walk( $elements, $max_depth ) {
$output = parent::walk($elements, $max_depth);
// Your code do things with output here...
return $output;
}
}
在扩展基础 Walker 时 class 我需要扩展 walk()
方法。
但是,调用父 walk()
方法没有结果。
这些是我尝试过的方法:
public function walk($elements, $max_depth) {
parent::walk($elements, $max_depth);
}
public function walk($elements, $max_depth) {
$parent_class=get_parent_class($this);
$args = array($elements, $max_depth);
call_user_func_array(array($parent_class, 'walk'), $args);
}
在我看来,一旦我重写 walk()
事情就坏了。
这个方法是否应该return一些具体的值? 我应该以不同的方式调用父方法吗?
Walker::walk
将 return 遍历操作产生的字符串。
您将得到的是使用 Walker::display_element
、Walker::start_lvl
、Walker::start_el
等方法创建的文本...
你将从父方法中得到的已经是 HTML 代码可能很难在第二次以正确的方式修改,但如果你真的想这样做:
public function walk($elements, $max_depth) {
$html = parent::walk($elements, $max_depth);
/* Do something with the HTML output */
return $html;
}
正如@TheFallen 在评论中指出的那样,Wordpress 的 class Walker 返回一个输出
// Extracted from WordPress\wp-includes\class-wp-walker.php
public function walk( $elements, $max_depth ) {
$args = array_slice(func_get_args(), 2);
$output = '';
//invalid parameter or nothing to walk
if ( $max_depth < -1 || empty( $elements ) ) {
return $output;
}
...
因此,如果您想扩展 class 并覆盖该方法,您必须保持原始行为,同时返回输出。我的建议:
class Extended_Walker extends Walker {
public function walk( $elements, $max_depth ) {
$output = parent::walk($elements, $max_depth);
// Your code do things with output here...
return $output;
}
}