我试图显示一个类别下拉列表(选择),其中父类别和子类别标记在子类别下。示例:
parent A
parent B
parent C
- child of C
- child of C
- child of C
parent D
parent E
- child of E
- child of E
parent F
相反,我得到的是:
parent A
parent B
parent C
parent D
parent E
parent F
- child of C
- child of C
- child of C
- child of E
- child of E
以下是我的短代码:
function categories_dropdown() {
$args = array(
\'taxonomy\' => \'my_custom_taxonomy\',
\'hide_empty\' => false,
\'echo\' => true,
\'hierarchical\' => true,
\'show_count\' => false,
\'orderby\' => \'parent\',
);
$categories = get_categories($args);
$select = "<select name=\'cat\' id=\'categories_dropdown\' class=\'postform\'>n";
$select.= "<option value=\'-1\'>Select category</option>n";
foreach($categories as $category){
if($category->count > 0){
if($category->parent!=0) {
$select.= "<option value=\'".$category->slug."\'> - ".$category->name." (". $category->count .")</option>";
} else {
$select.= "<option value=\'".$category->slug."\'>".$category->name." (". $category->count .")</option>";
}
}
}
$select.= "</select>";
return $select;
}
add_shortcode(\'categories-dropdown\', \'categories_dropdown\');
我这里的问题是,哪些参数负责父分类法类别下的子级的正确排序?这是用参数完成的还是我必须对选项下拉列表的显示进行编码的方式?我真的很感谢你抽出时间。
最合适的回答,由SO网友:Sally CJ 整理而成
我这里的问题是,哪一个参数对父分类类别下的子类的正确排序负责?
无-orderby
arg只对类别进行排序,而不对它们进行分组(将它们放在自己的父类别下),因此需要手动进行分组。
和设置orderby
到parent
只会将所有父类别放在顶部,然后是子类别,就像问题中的示例一样。。
但不是手动分组类别
实际上,您可以简单地使用
wp_dropdown_categories()
要获取层次结构/显示,请执行以下操作:
$args = array(
\'taxonomy\' => \'my_custom_taxonomy\',
\'hide_empty\' => false,
\'echo\' => false,
\'hierarchical\' => true,
\'show_count\' => true,
\'orderby\' => \'parent\',
\'id\' => \'categories_dropdown\',
\'value_field\' => \'slug\',
);
$select = wp_dropdown_categories( $args );
那会给你一个
select
标记/HTML与问题中的标记/HTML相似的菜单。
但是,如果需要添加自定义HTML,如data-xxx
属性到<option>
标记,然后您可以使用自己的自定义walker类(请参见Walker_CategoryDropdown
) 或者在我的answer 堆栈溢出时。