编辑是因为我完全误读了这个问题要知道term是否是父项,我们需要访问term post parent,因此最好替换更专门的方法walk()
.
也就是说,我知道OP中的代码在函数中使用类定义来避免致命错误,因为Walker_Category_Checklist
类未定义,但代码很难以这种方式读取。
因此,我认为最好编写一个自定义函数,返回自定义walker的实例:
add_filter( \'wp_terms_checklist_args\', \'wpse_149328_set_walker\' );
function wpse_149328_set_walker( $args ) {
if (
! empty( $args[\'taxonomy\'] )
&& ( $args[\'taxonomy\'] === \'product_cat\' ) // only for \'product_cat\' taxonomy
&& ( ! isset( $args[\'walker\'] ) || ! $args[\'walker\'] instanceof Walker )
) {
$args[\'checked_ontop\'] = FALSE;
$args[\'walker\'] = get_Walker_Category_No_Parent();
}
return $args;
}
现在,让我们编写
get_Walker_Category_No_Parent()
和定制步行者:
function get_Walker_Category_No_Parent() {
class Walker_Category_No_Parent extends Walker_Category_Checklist {
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
if ( (int) $category->parent === 0 ) {
$this->doing_parent = esc_html( $category->name );
} else {
parent::start_el( $output, $category, $depth, $args, $id );
}
}
function end_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
if ( ! isset( $this->doing_parent ) || empty( $this->doing_parent ) ) {
parent::end_el( $output, $category, $depth, $args, $id );
}
}
function start_lvl( &$output, $depth = 0, $args = array() ) {
if ( isset( $this->doing_parent ) && ! empty( $this->doing_parent ) ) {
$output .= \'<li><strong>\' . $this->doing_parent . \'</strong></li>\';
$this->doing_parent = FALSE;
}
parent::start_lvl( $output, $depth = 0, $args );
}
}
return new Walker_Category_No_Parent;
}
此walker仅当父类别有一些子类别时,才将其输出为文本。