Скрипт wp_mail с jQuery post
Мне нужно отправить email со страницы при отправке формы.
Я думал использовать jQuery post, но не совсем уверен, с чего начать. Стоит ли использовать wp_mail()
? И если да, то как его вызвать?
Извините, если вопрос кажется расплывчатым. Просто пытаюсь отправить email клиенту перед тем, как форма отправит данные на другой сайт.
$('#donationForm').submit(function() {
// отправляем email клиенту перед переходом на платежную форму worldpay
// отправляем данные в worldpay....
this.submit();
});

Сначала добавьте свою функцию обработки 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(); ?>
...
И всё готово.

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

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

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