我正在尝试扩展Walker_Category_Checklist
类。
class My_Walker_Category_Checklist extends Walker_Category_Checklist {
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
var_dump( $args['MY_PAREMETER'] ); // Output is NULL...
var_dump( $args['checked_ontop'] ); // This is NULL too...
}
}
我需要将一些额外的参数传递给$args
数组。此参数基于post meta,如果我将在get_post_meta()
中调用start_el
,则将对列表中的每个元素执行此操作,因为元素计数接近500,因此该元素将被执行。
在这里,我为wp_terms_checklist_args
创建了钩子:
add_filter( 'wp_terms_checklist_args', function( $args, $post_id ) {
if ( is_admin() ) {
if ( !empty( $args['taxonomy'] ) && ( $args['taxonomy'] === 'my-taxonomy' ) && ( ! isset( $args['walker'] ) || ! $args['walker'] instanceof Walker ) ) {
$args['walker'] = new My_Walker_Category_Checklist;
$args['MY_PAREMETER'] = get_post_meta( $post_id, 'my_data', 1 );
$args['checked_ontop'] = false;
}
}
return $args;
}, 10, 2 );
$args['checked_ontop'] = false
此参数有效但NULL
为start_el
,因此我理解这是不同的$args
参数。
如何在扩展类中将其他数据传递给$args
函数的start_el
参数?
谢谢!
更新1
将我的参数添加到var_dump
$args
来自wp_terms_checklist_args
的{{1}}
$args
这是来自array(5) {
["taxonomy"]=>
string(14) "my-taxonomy"
["popular_cats"]=>
array(10) {
[0]=>
int(64)
//...
}
["walker"]=>
object(My_Walker_Category_Checklist)#3282 (4) {
["tree_type"]=>
string(8) "category"
["db_fields"]=>
array(2) {
["parent"]=>
string(6) "parent"
["id"]=>
string(7) "term_id"
}
["max_pages"]=>
int(1)
["has_children"]=>
NULL
}
["my_parameter"]=>
string(7) "my-data"
["checked_ontop"]=>
bool(false)
}
var_dump
函数的$args
的{{1}}。这里没有在过滤器中添加的参数。
My_Walker_Category_Checklist
更新1.1
以下一种方式将args传递给start_el
不会产生任何结果:
array(6) {
["taxonomy"]=>
string(14) "my-taxonomy"
["disabled"]=>
bool(false)
["list_only"]=>
bool(false)
["selected_cats"]=>
array(10) {
[0]=>
int(212)
//...
}
["popular_cats"]=>
array(3) {
[0]=>
int(64)
//...
}
["has_children"]=>
bool(true)
}
这在保存所选术语时出现问题,因为wp_terms_checklist_args
变量已被重写。其中$args['selected_cats']['custom_data'] = array(
'MY_PAREMETER' => 'wow!',
);
给出了下一个:
[ “selected_cats”] =>
selected_cats
错过了所有选定的类别。
答案 0 :(得分:1)
我认为最好的解决方案是将所需数据添加到子节点构造函数中。将在创建class
时调用一次。
class My_Walker_Category_Checklist extends Walker_Category_Checklist {
function __construct(){
$this->myparam = 'my param';
}
//...
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
var_dump( $this->myparam );
}
}