Пользовательское сообщение проверки для поля выбора в контактной форме 7 WordPress

Я хочу показать пользовательское сообщение для поля выбора. Я использую плагин «Контактная форма 7 Пользовательская проверка» для пользовательского сообщения, но он не работает для поля выбора. Есть ли крючок, который может изменить мое сообщение только для поля выбора, так как остальная часть моего сообщения проверки в порядке.

Update:

У меня есть следующие поля:

<div class = "form-half">
                              <label for = "state" class = "visuallyhidden">state</label>[select* state id:state first_as_label "State" "Alabama" "Alaska" "American Samoa" "Arizona" "Arkansas" "California" "Colorado" "Connecticut" "Delaware" "District of Columbia" "Florida" "Georgia" "Guam" "Hawaii" "Idaho" "Illinois" "Indiana" "Iowa" "Kansas" "Kentucky" "Louisiana" "Maine" "Maryland" "Massachusetts" "Michigan" "Minnesota" "Mississippi" "Missouri" "Montana" "Nebraska" "Nevada" "New Hampshire" "New Jersey" "New Mexico" "New York" "North Carolina" "North Dakota" "Northern Marianas Islands" "Ohio" "Oklahoma" "Oregon" "Pennsylvania" "Puerto Rico" "Rhode Island" "South Carolina" "South Dakota" "Tennessee" "Texas" "Utah" "Vermont" "Virginia" "Virgin Islands" "Washington" "West Virginia" "Wisconsin" "Wyoming"]</div>

И я использовал для этого следующий хук, но он не работает:

add_filter( 'wpcf7_validate_select*', 'custom_select_validation_filter', 20, 2 );

function custom_select_validation_filter( $result, $tag ) {
    if ( 'state' == $tag->name ) {

        echo $test_custom_select = $_POST['state'];
        if ( empty( $test_custom_select ) || $test_custom_select == 'State' ) {
            // Example of result
            $result->invalidate($tag, __( 'Please enter state name', 'CF7' ));
        }

    }

    return $result;
}

Но это не работает.

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
3 763
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте следующий код:

add_filter( 'wpcf7_validate_select', 'custom_select_validation_filter', 20, 2 );


function custom_select_validation_filter( $result, $tag ) {
    if ( 'state' == $tag->name ) {

        $test_custom_select = $_POST['state'];
        if ( empty( $test_custom_select ) || $test_custom_select == 'State' ) {
            // Example of result
            $result->invalidate($tag, __( 'your-select is required', 'CF7' ));
        }

    }
    elseif ( 'second-select' == $tag->name ){

        $test_custom_select = $_POST['second-select'];
        if ( empty( $test_custom_select ) ) {
            // Example of result
            $result->invalidate($tag, __( 'second-select is required', 'CF7' ));
        }

    }

    return $result;
}

https://contactform7.com/2015/03/28/custom-validation/

Поле CF7: [выберите идентификатор штата: штат first_as_label "Штат" "Алабама" "Аляска" "Американское Самоа" "Аризона" "Арканзас" "Калифорния" "Колорадо" "Коннектикут" "Делавэр" "Округ Колумбия" "Флорида" "Джорджия" " Гуам" "Гавайи" "Айдахо" "Иллинойс" "Индиана" "Айова" "Канзас" "Кентукки" "Луизиана" "Мэн" "Мэриленд" "Массачусетс" "Мичиган" "Миннесота" "Миссисипи" "Миссури" "Монтана" «Небраска» «Невада» «Нью-Гэмпшир» «Нью-Джерси» «Нью-Мексико» «Нью-Йорк» «Северная Каролина» «Северная Дакота» «Северные Марианские острова» «Огайо» «Оклахома» «Орегон» «Пенсильвания» «Пуэрто-Рико» «Род-Айленд» «Южная Каролина» «Южная Дакота» «Теннесси» «Техас» «Юта» «Вермонт» «Вирджиния» «Виргинские острова» «Вашингтон» «Западная Вирджиния» «Висконсин» «Вайоминг»]

Я доволен проверкой, хочу только изменить сообщение

Al Waqar 09.04.2019 09:46

Также есть от 2 до 3 полей выбора, поэтому каждое поле должно иметь другое сообщение.

Al Waqar 09.04.2019 09:47

Вы можете проверить поля выбора в этой функции и проверить, выбрана ли опция. Если нет, вы можете вернуть собственное сообщение. Я отредактирую свой код.

Ben Goossens 09.04.2019 09:57

Привет, я обновил свой код, вы можете мне подсказать, правильно я делаю или нет?

Al Waqar 09.04.2019 11:59

Привет @AlWaqar, извините, в add_filter нет необходимости * (я обновил код). Также ваше поле не должно быть обязательным.

Ben Goossens 09.04.2019 13:39

проверено и работает.

// For the custom Price for shuttle transport
/**
 * Generates a HTML string of two or more `option` elements/tags.
 *
 * @see wpcf7_select_shuttleprice_form_tag_handler()
 *
 * @return string $html
 */
function shuttleprice() {

    $id_a = null;      
    $max_personen = get_field("maximale_anzahl", $id_a);
    $max_personen_gesamt = get_field("anzahl_maximale_personen_im_shuttle_mit_aufpreis", $id_a);
    $aufpreis = get_field("aufpreis_pro_person_im_shuttle", $id_a);

    $inkl = "";
    $more = "";

    for ($x = 1; $x <= $max_personen; $x++) {
        if ($x == 1) {
            $inkl = $inkl."<option value='".$x."'>für ".$x." Person (inklusive)</option>";
        } else {
            $inkl = $inkl."<option value='".$x."'>für ".$x." Personen (inklusive)</option>";
        }
    }

    if ($max_personen_gesamt != "") {
        $lauf = 1;
        for ($x = $max_personen + 1; $x <= $max_personen_gesamt; $x++) {
            $more = $more.'<option data-price = "'.$aufpreis*$lauf.'" value = "'.$x.'">für '.$x.' Personen ('.$aufpreis*$lauf.' € Aufpreis)</option>';
            $lauf++;
        }
    }

    $html = '<option value = "0">bitte wählen</option>'.$inkl.$more;

    return $html;
}


add_action( 'wpcf7_init', 'wpcf7_add_form_tag_select_shuttleprice' );
function wpcf7_add_form_tag_select_shuttleprice() {
    wpcf7_add_form_tag(
        array(
            'select_shuttleprice',
            'select_shuttleprice*',
        ),
        'wpcf7_select_shuttleprice_form_tag_handler',
        array(
            'name-attr'         => true,
            'selectable-values' => true,
        )
    );
}

function wpcf7_select_shuttleprice_form_tag_handler( $tag ) {
    return str_replace( '</select>', shuttleprice() . '</select>', str_replace(
        '<option value = "">---</option>', '', wpcf7_select_form_tag_handler( $tag )
    ) );
}


add_filter( 'wpcf7_validate_select_shuttleprice', 'wpcf7_select_shuttleprice_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_select_shuttleprice*', 'wpcf7_select_shuttleprice_validation_filter', 10, 2 );
function wpcf7_select_shuttleprice_validation_filter( $result, $tag ) {
    $name = $tag->name;
    $empty = ( empty( $_POST[ $name ] ) || '0' === $_POST[ $name ] );

    if ( $tag->is_required() && $empty ) {
        $result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
    }

    return $result;
}

С этим шорткодом

[select_shuttleprice* shuttleprice-1 class:shuttleprice]

Другие вопросы по теме