Скрипт wp_mail с jQuery post

31 мая 2011 г., 20:16:11
Просмотры: 16.5K
Голосов: 4

Мне нужно отправить email со страницы при отправке формы.

Я думал использовать jQuery post, но не совсем уверен, с чего начать. Стоит ли использовать wp_mail()? И если да, то как его вызвать?

Извините, если вопрос кажется расплывчатым. Просто пытаюсь отправить email клиенту перед тем, как форма отправит данные на другой сайт.

$('#donationForm').submit(function() {

// отправляем email клиенту перед переходом на платежную форму worldpay


// отправляем данные в worldpay....
this.submit();

});
0
Все ответы на вопрос 2
3
12

Сначала добавьте свою функцию обработки email и подключите её к хукам wp_ajax в файле functions.php следующим образом:

// Если хотите, чтобы функцию могли использовать только авторизованные пользователи, используйте этот хук
add_action('wp_ajax_mail_before_submit', 'mycustomtheme_send_mail_before_submit');

// Если хотите разрешить доступ к функции для неавторизованных пользователей, используйте этот хук
add_action('wp_ajax_nopriv_mail_before_submit', 'mycustomtheme_send_mail_before_submit');

// Если хотите разрешить отправку писем и авторизованным, и анонимным пользователям, используйте оба хука выше

function mycustomtheme_send_mail_before_submit(){
    check_ajax_referer('my_email_ajax_nonce');
    if ( isset($_POST['action']) && $_POST['action'] == "mail_before_submit" ){

    // Отправка email wp_mail( $to, $subject, $message, $headers, $attachments ); например:
        wp_mail($_POST['toemail'], 'тема письма', 'текст письма');
        echo 'письмо отправлено';
        die();
    }
    echo 'ошибка';
    die();
}

Затем в JS-файле вашей темы создайте AJAX-запрос следующим образом:

jQuery('#donationForm').submit(function() {

// Отправляем email клиенту перед переходом на форму оплаты Worldpay
var data = {
    action: 'mail_before_submit',
    toemail: $('#myemailfield').val(), // измените это на поле email в вашей форме
    _ajax_nonce: $('#my_email_ajax_nonce').data('nonce'),
};
jQuery.post(window.location.origin + "/wp-admin/admin-ajax.php", data, function(response) {
    console.log('Ответ сервера: ' + response);
});

});

Теперь добавьте nonce в ваш footer.php, так как он должен быть сгенерирован через PHP:

...
<span id="my_email_ajax_nonce" data-nonce="<?php echo wp_create_nonce( 'my_email_ajax_nonce' ); ?>"></span>
<?php wp_footer(); ?>
...

И всё готово.

1 июн. 2011 г. 02:29:59
Комментарии

спасибо! всё заработало, но пришлось удалить '_ajax_nonce', так как вызывало ошибку. Это важно? Dc

v3nt v3nt
1 июн. 2011 г. 15:18:23

это правильный способ и лучшая практика для защиты ajax-запросов.

Bainternet Bainternet
1 июн. 2011 г. 15:41:44

Спасибо, потребовалось некоторое время, но объяснение было довольно понятным. Очень признателен.

plushyObject plushyObject
18 сент. 2016 г. 21:34:58
0

По сути, вы можете использовать JavaScript для отправки данных в функцию WordPress, а затем эта функция WordPress может вызвать wp_mail() для отправки сообщения.

Отличной отправной точкой будет полезная статья AJAX в плагинах в Codex. В ней подробно описаны все шаги, необходимые для добавления вашего JavaScript на фронтенде, PHP на бэкенде и всего, что нужно сделать для их взаимодействия.

1 июн. 2011 г. 02:19:05