WordPress下拉多选项选项

时间:2015-03-15 17:19:30

标签: php wordpress select multi-select bootstrap-multiselect

我有以下代码用于WordPress下拉单选项。 我想使这个代码使用多个选择选项,但不知道如何。 请给出一个解决方案。

<?php 
        $args=array(
                'class'       => 'select-submit2',
                'hide_empty'  => false,
                'selected'    => $prop_action_category_selected,
                'name'        => 'prop_action_category',
                'id'          => 'prop_action_category_submit',
                'orderby'     => 'NAME',
                'order'       => 'ASC',
                'show_option_none'   => __('None','wordpress'),
                'taxonomy'    => 'property_action_category',
                'hierarchical'=> true
            );

           wp_dropdown_categories( $args );  ?>

亲切的问候

尼科莱塔

3 个答案:

答案 0 :(得分:2)

wp_dropdown_categories()函数是一个WordPress函数,可以创建类别下拉列表。您可以根据向函数传递各种参数来指定输出的方式和内容。

但是,没有任何论据表明该函数接受将其从单个选择列表更改为多个选择列表。

一种简单的方法是改变函数生成后给出的输出。这并非总是最好的方法,但在这种情况下,有两个关键元素使这个方法变得简单:

  1. 当函数默认回显(打印)其输出时,它接受一个参数来简单地返回HTML结果而不输出它(允许你在显示之前更改它)。
  2. 将下拉列表更改为多个选择列表就像向HTML标记添加“multiple”一样简单(即将<select>更改为<select multiple>
  3. 您可以调用该函数,在输出结果之前将结果放在变量中,然后在该结果上使用PHP的str_replace()将“mulitple”滑入select标记:

    /**
     * Your args from the question
     * plus turning echo off.
     * Note the change to the name (adding "[]")
     */
    $args = array(
        'class'       => 'select-submit2',
        'hide_empty'  => false,
        'selected'    => $prop_action_category_selected,
        'name'        => 'prop_action_category[]',
        'id'          => 'prop_action_category_submit',
        'orderby'     => 'NAME',
        'order'       => 'ASC',
        'show_option_none'   => __('None','wpestate'),
        'taxonomy'    => 'property_action_category',
        'hierarchical'=> true,
        'echo'        => 0,
    );
    
    /** get the dropdown **/
    $dropdown = wp_dropdown_categories( $args );
    
    /** insert "multiple" using str_replace **/
    $multi = str_replace( '<select', '<select multiple ', $dropdown );
    
    /** output result **/
    echo $multi;
    

    传递“echo”参数“0”告诉函数不输出任何内容(根据需要向数组中添加任何其他参数)。然后在结果上运行str_replace(),结果就是你输出的结果。

    请注意,您需要更改“name”参数以传递数组,以便能够传递/获取所有选定的项目。

答案 1 :(得分:0)

根据docs,您需要使用wp_category_checklist()。但是,如果你需要一个更脏的解决方案,这个应该有所帮助:

$dropdown = wp_dropdown_categories($args);
$dropdown = str_replace('id=', 'multiple="multiple" id=', $dropdown);

答案 2 :(得分:0)

以简单而强大的方式,只需将此代码添加到functions.php文件即可

add_filter( 'wp_dropdown_cats', 'wp_dropdown_cats_multiple', 10, 2 );

function wp_dropdown_cats_multiple( $output, $r ) {

    if( isset( $r['multiple'] ) && $r['multiple'] ) {

         $output = preg_replace( '/^<select/i', '<select multiple', $output );

        $output = str_replace( "name='{$r['name']}'", "name='{$r['name']}[]'", $output );

        foreach ( array_map( 'trim', explode( ",", $r['selected'] ) ) as $value )
            $output = str_replace( "value=\"{$value}\"", "value=\"{$value}\" selected", $output );

    }

    return $output;
}

并添加多个arg,如下所示:               

<div class="ci-select">
    <?php
        wp_dropdown_categories( array(
            'taxonomy'          => 'property_location',
            'hierarchical'      => true,
            'show_option_none'  => esc_html_x( '-', 'any property location', 'ci_theme' ),
            'option_none_value' => '',
            'name'              => 's_property_location',
            'id'                => 'property_location',
            'selected'          => isset( $_GET['s_property_location'] ) ? $_GET['s_property_location'] : '', // e.x 86,110,786
            'multiple'          => true
        ) );
    ?>
</div>