看看wp_dropdown_categories()
. 它使用walk_category_dropdown_tree()
渲染输出。就在那之后a filter named wp_dropdown_cats
允许更改最终标记:
$output = apply_filters( \'wp_dropdown_cats\', $output );
现在可以使用Regex和
preg_replace
或者使用
DOMDocument
, 等
请记住,您应该更改select
元素Name
属性-否则您将无法保存数组。示例:
<select multiple name="foo[]" ...>
但您仍需要更改
walker
并重写Walker本身。可以读取原因
in Walker_CategoryDropdown::start_el
:
if ( $category->term_id == $args[\'selected\'] )
$output .= \' selected="selected"\';
正如您所看到的,当前它只检查单个值,而不是数组。因此,基本上需要对阵列进行检查。检查数组的重写方法示例:
public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
$pad = str_repeat(\' \', $depth * 3);
$cat_name = apply_filters(\'list_cats\', $category->name, $category);
$output .= "<option class=\\"level-{$depth}\\" value=\\"{$category->term_id}\\"";
# >>> HERE WE GO:
if ( in_array( $category->term_id, $args[\'selected\'] ) )
$output .= \' selected="selected"\';
$output .= \'>\';
$output .= $pad.$cat_name;
if ( $args[\'show_count\'] )
$output .= "({$category->count})";
$output .= "</option>";
}
将上述方法放入扩展的新类中
Walker_CategoryDropdown
并将新的Walker类作为参数放入args数组中
wp_dropdown_categories()
:
wp_dropdown_categories( array(
\'walker\' => new Custom_Walker_CategoryDropdown
\'selected\' => get_option( \'foo\' )
# etc…
) );
如您所见,我添加了选项
foo
, 来自
name="foo[]"
在上面具体实施由您决定。这个答案只能作为你解决问题的指南。