Для этого можно использовать запрос AJAX.
Удалите атрибут action
из своей формы:
<div>
<form name="formSenda" method="POST">
<input type="text" placeholder="name" id="nameSenda" name="nameSenda">
<input type="email" placeholder="emailSenda" id="emailSenda" name="emailSenda">
<input type="submit" value="Check" name="submitSenda">
</form>
</div>
Добавьте следующее * Код 1080 * для отправки запроса:
<script type="text/javascript">
(function($) {
$(function() {
function handleFormSubmission(e) {
$.ajax({
type: 'POST',
// Replace with the url to your own `/wp-admin/admin-ajax.php`
url: 'https://example.com/wp-admin/admin-ajax.php',
data: {
// Action name should be the same on the backend
action: 'send_invoice',
},
success: function() {
document.location = 'categories';
},
});
}
$('form[name="formSenda"]').on('submit', handleFormSubmission);
});
})(jQuery);
</script>
Затем подключитесь к wp_ajax_
и wp_ajax_nopriv_
для обработки ваших пользовательских AJAX конечных точек.
wp_ajax_
срабатывает для зарегистрированных пользователей . wp_ajax_nopriv_
обрабатывает запросы от неаутентифицированных пользователей (т.е. когда is_user_logged_in()
возвращает false
).
Чтобы разрешить оба, вы должны зарегистрировать оба крючка.
Итак, в ваших functions.php
:
<?php
// where send_invoice matches the action name on the frontend
add_action( 'wp_ajax_send_invoice', 'yourchildtheme_handle_invoice' );
add_action( 'wp_ajax_nopriv_send_invoice', 'yourchildtheme_handle_invoice' );
/**
* Send the invoice via email
*
* @param string $na The name
* @param string $em The email
*/
function in_senda( $na, $em ) {
// Sanitize your fields!
$na = sanitize_text_field( $na );
$em = sanitize_email( $em );
$message = "Hi $na, is your email $em?";
$headers = "From Fly Gadgets \r\n";
mail( $em, 'Invoice', $message, $headers );
}
/**
* Handle the contact form ajax request
*/
function yourchildtheme_handle_invoice() {
$name_senda = $_POST['nameSenda'];
$email_senda = $_POST['emailSenda'];
if ( ! empty( $name_senda ) && ! empty( $email_senda ) ) {
in_senda( $name_senda, $email_senda );
}
}
Заметки
Я добавил некоторую очистку в вашу функцию in_senda()
. Вы можете прочитать больше о проверке, очистке и экранировании пользовательских данных .
Это также хорошая идея для изучения WordPress Nonces . Как говорится в Кодексе:
[…], чтобы помочь защитить URL-адреса и формы от определенных типов злоупотреблений, злонамеренного или иного.
При использовании mail()
для отправки электронных писем с веб-сайта WordPress прекрасно , вы можете взглянуть на wp_mail()
. Это подключаемая функция, поэтому в некоторых случаях она действительно полезна.
Отказ от ответственности: На самом деле я не проверял этот код.