wp_dropdown_categories con selección múltiple

2

en el cuadro de búsqueda Me gustaría que los visitantes puedan buscar más de una ubicación (casas). El código en este momento es:

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

¿Cómo cambio esto a una selección múltiple?

Muchas gracias por tu respuesta. Carlijn

    
pregunta CarlijnDN 29.01.2016 - 12:38

4 respuestas

2

wp_dropdown_categories tiene un filtro aplicado a la salida que se llama justo antes de que la función devuelva o haga eco de la salida.

Con esto puedes agregar un filtro a tu archivo funtions.php que manipula el campo de selección y le agrega un atributo múltiple.

El siguiente filtro buscará la etiqueta de apertura seleccionada y le agregará el atributo múltiple. También puede agregar el atributo de tamaño para controlar la cantidad de elementos que se muestran a la vez.

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;
}
    
respondido por el Tunji 21.01.2017 - 08:25
1

Solo agrega este código a tus funciones.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;
}

Y agrega múltiples arg como a continuación:               

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

    
respondido por el MahdiY 23.03.2017 - 13:26
1

Esta es una adición a la respuesta de @MahdiY. Esa respuesta asume que los datos de selección múltiple estarán en forma delimitada por comas. Estoy encontrando que mi selección múltiple es en realidad una matriz en cuyo caso se rompe wp_dropdown_cats_multiple . Agregué una línea y modifiqué 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;
}

No se pudo agregar esto como un comentario porque mi reputación es demasiado baja.

    
respondido por el jer0dh 06.09.2017 - 22:10
0

Puedes verificar:

wp_category_checklist Puede definir un marcador personalizado y cambiar las casillas de verificación para desplegar con selección múltiple.

wp_category_checklist muestra una lista desordenada de los elementos de la casilla de verificación <input> etiquetados con nombres de categoría.

    
respondido por el AddWeb Solution Pvt Ltd 29.01.2016 - 14:27

Lea otras preguntas en las etiquetas