我有一个小部件,我需要添加一个类别选择列表。最终用户应该能够选择一个类别,我需要用小部件保存类别ID。
我遇到了一个绊脚石,因为我无法使排除数组正常工作。被排除在外的猫仍会出现在下拉列表中。我做错了什么?
function form( $instance ) {
$instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'text\' => \'\', \'hide_title\' => \'\', \'category_id\' => \'\' ) );
$title = format_to_edit($instance[\'title\']);
$text = format_to_edit($instance[\'text\']);
$hide_title = $instance[\'hide_title\'] ? \' checked="checked"\' : \'\';
$category_id = $instance[\'category_id\'] ? \' selected="selected"\' : \'\';
?>
<p>
<label for="<?php echo $this->get_field_id( \'title\' ); ?>">Title:</label>
<input id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" value="<?php echo $title; ?>" class="widefat" />
</p>
<select id="<?php echo $this->get_field_id( \'category_id\' ); ?>" name="<?php echo $this->get_field_name( \'category_id\' ); ?>">
<option value=""><?php echo esc_attr(__(\'Select a Category\')); ?></option>
<?php
$args = array(\'exclude\' => array(get_cats()),\'hide_empty\' => 0 );
$categories=get_categories($args);
foreach ($categories as $category) {
$option = \'<option value="\'.$category->cat_ID.\'">\';
$option .= $category->cat_name;
$option .= \'</option>\';
echo $option;
}
?>
</select>
function get_cats(){
$exclude_cats = array(
get_cat_ID(\'test1\'),
get_cat_ID(\'test2\'),
get_cat_ID(\'test3\'),
);
return $exclude_cats;
}
最合适的回答,由SO网友:OleVik 整理而成
每http://codex.wordpress.org/Class_Reference/WP_Query 您需要在数组的数字标识符前面加上减号,例如$query = new WP_Query( \'cat=-12,-34,-56\' );
, 这将排除标识符为12、34和56的类别。
您可以通过更改get_cats
功能包括:
function get_cats(){
$exclude_cats = array(
get_cat_ID(\'test1\'),
get_cat_ID(\'test2\'),
get_cat_ID(\'test3\'),
);
foreach ($exclude_cats as $item) {
$array[] = \'-\'.$item;
}
return $array;
}
它返回的数组与之前完全相同,只是每个项前面都有一个减号。