@arseniy_romanov

Как написать функцию обработчик для AJAX формы Wordpress?

При отправке приходит пустая форма.

Не могу правильно написать функцию обработчик.

прошу помощи!

Форма:
<form action="" method="POST" class="form form--contact js-contact-form-submit" autocomplete="off">
                                <div class="form__group">
                                    <label for="contact_name" class="form__label">Client/Agency</label>
                                    <input type="text" class="form__input" name="contact_name" placeholder="Client/Agency" required>
                                </div>
                                <div class="form__group">
                                    <label for="contact_website" class="form__label">Website</label>
                                    <input type="text" class="form__input" name="contact_website" placeholder="Website" required>
                                </div>
                                <div class="form__group">
                                    <label for="contact_email" class="form__label">Email</label>
                                    <input type="email" class="form__input" name="contact_email" placeholder="Email" required>
                                </div>
                                <div class="form__group form__group--actions">
                                    <button type="submit" class="form__button" name="contact_submit">Send.</button>
                                    <input type="hidden" id="_wpnonce" name="_wpnonce" value="b0d62ace00" /><input type="hidden" name="_wp_http_referer" value="/contact/" />                               </div>
                            </form>

Скрипт:
$.ajax({
            type: "post",
            url: Oe,
            dataType: "json",
            data: {
                action: "handle_contact_form",
                data: t.serialize()
            },
            success: function(e) {
                200 == e.status && n.children().fadeOut(500, function() {
                    n.children().remove(),
                    n.append('<p class="response">Большое спасибо за ваш интерес!<br />Мы скоро с вами свяжемся.</p>')
                })
            }
        })
    }),


Обработчик:
add_action('wp_ajax_nopriv_handle_contact_form', 'my_action_callback');
add_action('wp_ajax_handle_contact_form', 'my_action_callback');
    
function my_action_callback() {
    $response = [
                        
  ];
  

  $to_mail = 'info@a358.ru';
  $subject = 'Контакты'; 
   
  $name = $_POST['contact_name'];
  $phone = $_POST['contact_website'];
  $email = $_POST['contact_email'];
  
  $message = 'Имя: ' . $name . '<br> Сайт: ' . $phone . '<br> Почта: ' . $email ;
  
  $headers =  'MIME-Version: 1.0' . "\r\n";
  $headers .= 'From: Сообщение с сайта <info@a358.ru>' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  wp_mail($to_mail, $subject, $message , $headers);
  

  exit(json_encode($response));
}
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
@arseniy_romanov Автор вопроса
Так как не разбирался в теме - вопрос был слишком широкий.

На самом деле тут нужно было конвертировать $_POST в нормальный массив -

wp_parse_str($_POST['data'], $searcharray);

и отдать соответстующий ответ для success -

wp_send_json(array ('message'=> 'message sent','status'=> 200));


РЕШЕНИЕ:

add_action('wp_ajax_nopriv_handle_contact_form', 'my_action_callback');
add_action('wp_ajax_handle_contact_form', 'my_action_callback');

function my_action_callback() {


wp_parse_str($_POST['data'], $searcharray);


  $to_mail = 'info@a358.ru';
  $subject = 'Контакты'; 
   
  $name = $searcharray['contact_name'];
  $phone = $searcharray['contact_website'];
  $email = $searcharray['contact_email'];
  
  $message = 'Имя: ' . $name . '<br> Сайт: ' . $phone . '<br> Почта: ' . $email ;
  
  $headers =  'MIME-Version: 1.0' . "\r\n";
  $headers .= 'From: Сообщение с сайта <info@a358.ru>' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  
  


try{
    
    if ( wp_mail($to_mail, $subject, $message , $headers)){

wp_send_json(array ('message'=> 'message sent','status'=> 200));
} else{
    wp_send_json_error('email error');
}

}catch (Expection $e)
{
    wp_send_json_error($e->getMessage());
    
}
 wp_die();
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BBoyJuss
@BBoyJuss
WordPress, интерфейсы и все вытекающие
Все поля прилетают в запросе?
Не пустая ли переиенная $message?
Для чего тебе exit(json_encode($response)); если надо просто exit(); или wp_die();?
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Чет я не вижу что у вас что-то привязано к аяксу. Подозреваю что никакого аякса у вас не происходит.
$response у вас всегда пустой массив, зачем он вообще?
Переменные вообще никак не фильтруются... Плохо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы