@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));
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 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 у вас всегда пустой массив, зачем он вообще?
Переменные вообще никак не фильтруются... Плохо.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
21 сент. 2020, в 16:30
400000 руб./за проект
21 сент. 2020, в 16:15
15000 руб./за проект
21 сент. 2020, в 15:45
60000 руб./за проект