以下解决方案阻止输出复选框。在我看来,这似乎要干净得多。
我做了一个扩展核心的定制助行器Walker_Category_Checklist
将覆盖start_el
函数,以便可以有条件地设置$args[\'list_only\']
为真。在这种情况下,函数检查是否有顶级术语($category->parent == 0
) 其中包含子条款($args[\'has_children\']
) 当然,我们是否使用了正确的分类法,还有一个检查。满足这些条件,$args[\'list_only\']
设置为true,并调用父方法,此时不会输出此元素的复选框。
class Wpse22836_Walker_Category_Checklist extends Walker_Category_Checklist {
public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
if ( \'category\' == $args[\'taxonomy\']
&& $args[\'has_children\']
&& 0 === $category->parent) {
$args[\'list_only\'] = true;
}
parent::start_el( $output, $category, $depth, $args, $id );
}
}
要使WordPress使用这个walker类而不是原来的类,我们可以使用过滤器
wp_terms_checklist_args
在里面
wp_terms_checklist()
:
add_filter( \'wp_terms_checklist_args\', function( $args, $post_id ) {
$args[\'walker\'] = new Wpse22836_Walker_Category_Checklist();
return $args;
}, 10, 2 );
此解决方案的优点是可以在所有使用核心功能的地方自动工作
wp_terms_checklist()
而且它不依赖于JavaScript。