L
L
LastGeneral2020-06-14 13:08:01
WordPress
LastGeneral, 2020-06-14 13:08:01

How to add select to feedback form?

Following the example , I made a form, everything works fine, only I need to add a drop-down list of addresses, but it does not send the value of the selected option, how to fix it?
5ee5f5993ff91116479164.jpeg

add_shortcode( 'art_feedback', 'art_feedback' );
/**
 * Шорткод вывода формы
 *
 * @return string
 * @see https://wpruse.ru/?p=3224
 */
function art_feedback() {

  ob_start();
  ?>
  <form id="add_feedback">
    <fieldset>  
      <legend>Ваше имя</legend>
      <input type="text" name="art_name" id="art_name" class="required art_name" placeholder="" value=""/>
    </fieldset>
    <fieldset>  
      <legend>Ваш телефон</legend>
      <input type="tel" name="art_tel" id="art_tel" class="required art_tel input-mask" placeholder="" value=""/>
    </fieldset>
    <fieldset>  
      <legend>Ближайшее к вам сто</legend>
      <select name="art_address" id="art_address">
        <option value="Правый берег">(Правый берег) ул. Юдина, 15В</option>
        <option value="Левый берег">(Левый берег) ул. Варваровская, 18</option>
      </select>
    </fieldset>
    <!-- 
    <input type="email" name="art_email" id="art_email" class="required art_email" placeholder="Ваш E-Mail" value=""/> -->
    <fieldset>  
      <legend>Марка Вашего автомобиля</legend>
      <input type="text" name="art_subject" id="art_subject" class="art_subject" placeholder="" value=""/>
    </fieldset>
    <fieldset>  
      <legend>VIN код Вашего автомобиля</legend>
      <input type="text" name="art_vin" id="art_vin" class="art_vin" placeholder="" value=""/>
    </fieldset>
    <fieldset>  
      <legend>Начните вводить проблему</legend>
      <textarea name="art_comments" id="art_comments" placeholder="" rows="10" cols="30" class="required art_comments"></textarea>
    </fieldset>

    <input type="checkbox" name="art_anticheck" id="art_anticheck" class="art_anticheck" style="display: none !important;" value="true" checked="checked"/>

    <input type="text" name="art_submitted" id="art_submitted" value="" style="display: none !important;"/>

    <input type="submit" id="submit-feedback" class="button" value="Записаться"/>
  </form>
  <?php

  return ob_get_clean();
}

add_action( 'wp_enqueue_scripts', 'art_feedback_scripts' );
/**
 * Подключение файлов скрипта формы обратной связи
 *
 * @see https://wpruse.ru/?p=3224
 */
function art_feedback_scripts() {

  // Обрабтка полей формы
  wp_enqueue_script( 'jquery-form' );

  // Подключаем файл скрипта
  wp_enqueue_script(
    'feedback',
    get_stylesheet_directory_uri() . '/js/feedback.js',
    array( 'jquery' ),
    1.0,
    true
  );

  // Задаем данные обьекта ajax
  wp_localize_script(
    'feedback',
    'feedback_object',
    array(
      'url'   => admin_url( 'admin-ajax.php' ),
      'nonce' => wp_create_nonce( 'feedback-nonce' ),
    )
  );

}


add_action( 'wp_ajax_feedback_action', 'ajax_action_callback' );
add_action( 'wp_ajax_nopriv_feedback_action', 'ajax_action_callback' );
/**
 * Обработка скрипта
 *
 * @see https://wpruse.ru/?p=3224
 */
function ajax_action_callback() {

  // Массив ошибок
  $err_message = array();

  // Проверяем nonce. Если проверкане прошла, то блокируем отправку
  if ( ! wp_verify_nonce( $_POST['nonce'], 'feedback-nonce' ) ) {
    wp_die( 'Данные отправлены с левого адреса' );
  }

  // Проверяем на спам. Если скрытое поле заполнено или снят чек, то блокируем отправку
  if ( false === $_POST['art_anticheck'] || ! empty( $_POST['art_submitted'] ) ) {
    wp_die( 'Пошел нахрен, мальчик!(c)' );
  }

  // Проверяем полей имени, если пустое, то пишем сообщение в массив ошибок
  if ( empty( $_POST['art_name'] ) || ! isset( $_POST['art_name'] ) ) {
    $err_message['name'] = 'Пожалуйста, введите ваше имя.';
  } else {
    $art_name = sanitize_text_field( $_POST['art_name'] );
  }
  
  // Проверяем полей телефон, если пустое, то пишем сообщение в массив ошибок
  if ( empty( $_POST['art_tel'] ) || ! isset( $_POST['art_tel'] ) ) {
    $err_message['tel'] = 'Пожалуйста, введите ваш телефон.';
  } else {
    $art_tel = sanitize_text_field( $_POST['art_tel'] );
  }
  // Проверяем полей марка авто, если пустое, то пишем сообщение по умолчанию
  if ( empty( $_POST['art_subject'] ) || ! isset( $_POST['art_subject'] ) ) {
    $art_subject = 'Сообщение с сайта';
  } else {
    $art_subject = sanitize_text_field( $_POST['art_subject'] );
  }
  // Проверяем полей вин код, если пустое, то пишем сообщение по умолчанию
  if ( empty( $_POST['art_vin'] ) || ! isset( $_POST['art_vin'] ) ) {
    $art_message = 'Сообщение с сайта';
  } else {
    $art_vin = sanitize_text_field( $_POST['art_vin'] );
  }
  // Проверяем полей сообщения, если пустое, то пишем сообщение в массив ошибок
  if ( empty( $_POST['art_comments'] ) || ! isset( $_POST['art_comments'] ) ) {
    $err_message['comments'] = 'Пожалуйста, введите ваше сообщение.';
  } else {
    $art_comments = sanitize_textarea_field( $_POST['art_comments'] );
  }

  // Проверяем массив ошибок, если не пустой, то передаем сообщение. Иначе отправляем письмо
  if ( $err_message ) {

    wp_send_json_error( $err_message );

  } else {

    // Указываем адресата
    $email_to = '';

    // Если адресат не указан, то берем данные из настроек сайта
    if ( ! $email_to ) {
      $email_to = get_option( 'admin_email' );
    }

    $body    = "Имя: $art_name \nТелефон: $art_tel  \nАдрес: $art_address \nМарка авто: $art_subject \nVIN код: $art_vin \n\nСообщение: $art_comments";
    $headers = 'From: ' . $art_name . ' <' . $email_to . '>' . "\r\n" . 'Reply-To: ' . $email_to;

    // Отправляем письмо
    wp_mail( $email_to, $art_subject, $body, $headers );

    // Отправляем сообщение об успешной отправке
    $message_success = 'Собщение отправлено!';
    wp_send_json_success( $message_success );
  }

  // На всякий случай убиваем еще раз процесс ajax
  wp_die();

}

jQuery(document).ready(function ($) {
    var add_form = $('#add_feedback');

    // Сброс значений полей
    $('#add_feedback input, #add_feedback textarea').on('blur', function () {
        $('#add_feedback input, #add_feedback textarea').removeClass('error');
        $('.error-name,.error-tel,.error-email,.error-comments,.message-success').remove();
        $('#submit-feedback').val('Отправить сообщение');
    });

    // Отправка значений полей
    var options = {
        url: feedback_object.url,
        data: {
            action: 'feedback_action',
            nonce: feedback_object.nonce
        },
        type: 'POST',
        dataType: 'json',
        beforeSubmit: function (xhr) {
            // При отправке формы меняем надпись на кнопке
            $('#submit-feedback').val('Отправляем...');
        },
        success: function (request, xhr, status, error) {
            
            if (request.success === true) {
                // Если все поля заполнены, отправляем данные и меняем надпись на кнопке
                add_form.after('<div class="message-success">' + request.data + '</div>').slideDown();
                $('#submit-feedback').val('Отправить сообщение');
            } else {
                // Если поля не заполнены, выводим сообщения и меняем надпись на кнопке
                $.each(request.data, function (key, val) {
                    $('.art_' + key).addClass('error');
                    $('.art_' + key).before('<span class="error-' + key + '">' + val + '</span>');
                });
                $('#submit-feedback').val('Что-то пошло не так...');

            }
            // При успешной отправке сбрасываем значения полей
            $('#add_feedback')[0].reset();
        },
        error: function (request, status, error) {
            $('#submit-feedback').val('Что-то пошло не так...');
        }
    };
    // Отправка формы
    add_form.ajaxForm(options);
});

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
secretsergey, 2020-06-14
@LastGeneral

After:

if ( empty( $_POST['art_tel'] ) || ! isset( $_POST['art_tel'] ) ) {
    $err_message['tel'] = 'Пожалуйста, введите ваш телефон.';
  } else {
    $art_tel = sanitize_text_field( $_POST['art_tel'] );
  }

Insert:
$art_address = sanitize_text_field( $_POST['art_address'] );

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question