如何从小部件管理面板内的Get_Categories()选择列表中排除类别

时间:2012-01-17 作者:Scott B

我有一个小部件,我需要添加一个类别选择列表。最终用户应该能够选择一个类别,我需要用小部件保存类别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;
}

2 个回复
最合适的回答,由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;
}
它返回的数组与之前完全相同,只是每个项前面都有一个减号。

SO网友:Michael

get_cats() 已返回数组,因此在此处使用“array”太多:

\'exclude\' => array(get_cats()),
尝试:

\'exclude\' => get_cats(),

结束