name ) ) return ''; $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) $class .= ' wpcf7-not-valid'; $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true ); if ( $tag->is_required() ) $atts['aria-required'] = 'true'; $atts['aria-invalid'] = $validation_error ? 'true' : 'false'; $defaults = array(); if ( $matches = $tag->get_first_match_option( '/^default:([0-9_]+)$/' ) ) $defaults = explode( '_', $matches[1] ); $multiple = $tag->has_option( 'multiple' ); $include_blank = $tag->has_option( 'include_blank' ); $first_as_label = $tag->has_option( 'first_as_label' ); $values = $tag->values; $labels = $tag->labels; if ( $data = (array) $tag->get_data_option() ) { $values = array_merge( $values, array_values( $data ) ); $labels = array_merge( $labels, array_values( $data ) ); } $empty_select = empty( $values ); if ( $empty_select || $include_blank ) { array_unshift( $labels, '---' ); array_unshift( $values, '' ); } elseif ( $first_as_label ) { $values[0] = ''; } $html = ''; $hangover = wpcf7_get_hangover( $tag->name ); foreach ( $values as $key => $value ) { $selected = false; if ( $hangover ) { if ( $multiple ) { $selected = in_array( esc_sql( $value ), (array) $hangover ); } else { $selected = ( $hangover == esc_sql( $value ) ); } } else { if ( ! $empty_select && in_array( $key + 1, (array) $defaults ) ) { $selected = true; } } $item_atts = array( 'value' => $value, 'selected' => $selected ? 'selected' : '' ); $item_atts = wpcf7_format_atts( $item_atts ); $label = isset( $labels[$key] ) ? $labels[$key] : $value; $html .= sprintf( '', $item_atts, esc_html( $label ) ); } if ( $multiple ) $atts['multiple'] = 'multiple'; $atts['name'] = $tag->name . ( $multiple ? '[]' : '' ); $atts = wpcf7_format_atts( $atts ); $html = sprintf( '%4$s', sanitize_html_class( $tag->name ), $atts, $html, $validation_error ); return $html; } /* Validation filter */ add_filter( 'wpcf7_validate_select', 'wpcf7_select_validation_filter', 10, 2 ); add_filter( 'wpcf7_validate_select*', 'wpcf7_select_validation_filter', 10, 2 ); function wpcf7_select_validation_filter( $result, $tag ) { $tag = new WPCF7_Shortcode( $tag ); $name = $tag->name; if ( isset( $_POST[$name] ) && is_array( $_POST[$name] ) ) { foreach ( $_POST[$name] as $key => $value ) { if ( '' === $value ) unset( $_POST[$name][$key] ); } } if ( $tag->is_required() ) { if ( ! isset( $_POST[$name] ) || empty( $_POST[$name] ) && '0' !== $_POST[$name] ) { $result['valid'] = false; $result['reason'][$name] = wpcf7_get_message( 'invalid_required' ); } } if ( isset( $result['reason'][$name] ) && $id = $tag->get_id_option() ) { $result['idref'][$name] = $id; } return $result; } /* Tag generator */ add_action( 'admin_init', 'wpcf7_add_tag_generator_menu', 25 ); function wpcf7_add_tag_generator_menu() { if ( ! function_exists( 'wpcf7_add_tag_generator' ) ) return; wpcf7_add_tag_generator( 'menu', __( 'Drop-down menu', 'contact-form-7' ), 'wpcf7-tg-pane-menu', 'wpcf7_tg_pane_menu' ); } function wpcf7_tg_pane_menu( $contact_form ) { ?>