带有多个选择的WP_DROPDOWN_CATEGORES

时间:2016-01-29 作者:CarlijnDN

在搜索框中,我希望访问者能够搜索多个位置(房屋)。目前的代码是:

    <div class="col-md-3 col-sm-6 col-xs-12">
        <label for="property_location"><?php _ex( \'Locatie\', \'property search label\', \'ci_theme\' ); ?></label>

        <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\'] : \'\',
                ) );
            ?>
        </div>
    </div>
如何将其更改为多选?

非常感谢您的回答。Carlijn公司

4 个回复
SO网友:Tunji

wp_dropdown_categories 将过滤器应用于在函数返回或回显输出之前调用的输出。

有了它,你可以在你的函数中添加一个过滤器。处理选择字段并向其添加多个属性的php文件。

下面的过滤器将搜索选择开始标记并向其添加多个属性。还可以添加“大小”属性来控制一次显示的项目数。

add_filter( \'wp_dropdown_cats\', \'dropdown_filter\', 10, 2);

function dropdown_filter( $output, $r ) {
    $output = preg_replace( \'/<select (.*?) >/\', \'<select $1 size="5" multiple>\', $output);
    return $output;
}

SO网友:MahdiY

只需将此代码添加到函数中。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;
}
并添加多个参数,如下所示:

<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>

SO网友:jer0dh

这是对@MahdiY答案的补充。该答案假设multiselect数据将采用逗号分隔的形式。我发现我的multi-select实际上是一个数组,在这种情况下wp_dropdown_cats_multiple 休息。我添加了一行并更改了foreach.

function wp_dropdown_cats_multiple( $output, $r ) {

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

        $output = preg_replace( \'/^<select/i\', \'<select multiple data-live-search="true" data-style="btn-info"\', $output );

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

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

    }

    return $output;
}
无法将此作为评论添加,因为我的声誉太低。

SO网友:AddWeb Solution Pvt Ltd

您可以检查:

wp_category_checklist 您可以定义自定义walker,并将复选框更改为具有多选功能的下拉列表。

wp_category_checklist 输出无序的复选框列表<input> 用类别名称标记的元素。

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the