WooCommerce Custom Fields - Multiselect WooCommerce Custom Fields - Multiselect wordpress wordpress

WooCommerce Custom Fields - Multiselect


You need to create your own custom field type handler. If you look at WooCommerce source code you will see that you can use filter: 'woocommerce_form_field_' . $args['type']

I haven't really tested this, this is just slightly altered code from single "select" control, but you get the point:

add_filter( 'woocommerce_form_field_multiselect', 'custom_multiselect_handler', 10, 4 );function custom_multiselect_handler( $field, $key, $args, $value ) {    $options = '';    if ( ! empty( $args['options'] ) ) {        foreach ( $args['options'] as $option_key => $option_text ) {            $options .= '<option value="' . $option_key . '" '. selected( $value, $option_key, false ) . '>' . $option_text .'</option>';        }        if ($args['required']) {            $args['class'][] = 'validate-required';            $required = ' <abbr class="required" title="' . esc_attr__('required', 'woocommerce') . '">*</abbr>';        }        else {            $required = ' <span class="optional">(' . esc_html__('optional', 'woocommerce') . ')</span>';        }        $field = '<p class="form-row ' . implode( ' ', $args['class'] ) .'" id="' . $key . '_field">            <label for="' . $key . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>            <select name="' . $key . '" id="' . $key . '" class="select" multiple="multiple">                ' . $options . '            </select>        </p>' . $args['after'];    }    return $field;}

And in your code just state the type as 'multiselect':

add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');function my_custom_checkout_field( $checkout ) {    echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';    woocommerce_form_field( 'my_field_name', array(        'type'          => 'multiselect',        'class'         => array('my-field-class form-row-wide'),        'label'         => __('Fill in this field'),        'placeholder'   => __('Enter something'),        'options'       => array(            'Buick' => __('Buick', 'woocommerce' ),            'Ford' => __('Ford', 'woocommerce' )        )        ), $checkout->get_value( 'my_field_name' ));    echo '</div>';}


You can use this woocommerce plugin to easily do that if you are having issues with the snippet. "Woocommerce Easy Checkout Fields Editor". You can find it at codecanyon