WordPress форма действия не работает

У меня есть страница-contact.php (у меня есть пользовательская форма)

            <form id="contact-form" name="contact-form" method="post" action="">
<input type="text" name="name" placeholder="name"/>
<input type="text" name="email" placeholder="email"/>
<textarea rows="4" cols="50" name="message"placeholder="message"> </textarea>
<input id="submit" type="submit" name="submit" value="send"/>
</form>

У меня есть мой email_process.php (

<?php

$to        = 'info@domain.com';
$subject   = $_POST['name'];
$email     = $_POST['email'];
$body      = $_POST['message'];
$headers   = 'From: '.$email;
$mailCheck = mail($to, $subject, $body, $headers);

if($mailCheck) echo 1;

?>

У меня также есть JS-файл для вывода моего сообщения об успехе и сообщения об ошибке. Форма JS, кажется, работает. но email_process.php не работает. Для HTML, написанного от руки без WordPress, действие формы работает «email_process.php». Я думаю, что WordPress обрабатывает код по-другому. Может кто-то помочь мне с этим?

$(document).ready(function(){
alertAnswer();
});var check = 1;

function alertAnswer(){
$('#contact-form').submit(function(event){
event.preventDefault();

checkFormFill();
if(check == false) alert("you didn't answer my form");
else sendMessage();
});
}

function checkFormFill() {
check = 1;
$('#contact-form input[type="text"]').each(function(){
if($(this).val().length < 3) check = false
})

if($('#contact-form textarea').val().length < 3) check = false
}

function eraseFormData() {
$('#contact-form input[type="text"]').each(function(){
$(this).val('');
})

$('#contact-form textarea').val('');
}

function sendMessage() {
$.post('email_process.php',
{
name: $('input[name="name"]').val(),
email: $('input[name="email"]').val(),
message: $('textarea[name="message"]').val()
},
function(data) {
if(data == 1) {
$('#sendMessage').text("Thanks for contacting us.
We\'ll get back to you     shortly.");
$('#sendMessage').css("margin-top","15px");
eraseFormData();
}
else $('#sendMessage').text("Sorry, an error occured.
Please try again!");
});
}

0

Решение

В WordPress есть много гибких плагинов для создания форм и отправки без какого-либо жесткого кодирования. Но если вы хотите знать, как это делается в WordPress, вам нужно использовать wp_mail( $to, $subject, $body, $headers );, Попробуйте следующее.

Добавьте это в ваши functions.php

add_action('wp_ajax_nopriv_send_email', 'send_email');

function send_email() {
// check the nonce before submit the form
$nonce = check_ajax_referer( 'ajax_nonce', 'nonce' );
if($nonce) {

$to        = 'info@domain.com';
$subject   = $_POST['name'];
$email     = $_POST['email'];
$body = $_POST['message'];
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );
}

}

Создайте новый файл, добавьте следующий код и назовите его как form.js.

(function($) {
jQuery( "form#contact-form" ).submit(function( event ) {
name: jQuery('input[name="name"]').val();
email: jQuery('input[name="email"]').val();
message: jQuery('textarea[name="message"]').val();
jQuery.ajax({
url: ajax_object.url,
data: nonce:ajax_object.nonce + 'action=send_email&name='+name+'&email='+email+'&message='+message,
dataType: 'JSON',
type: 'POST',
success:function(data){
jQuery('#sendMessage').text("Thanks for contacting us. We\'ll get back to you     shortly.");
}
});
});
}(jQuery));

Затем включите следующий код в ваш файл funtions.php, чтобы поставить скрипт в очередь. и убедитесь, что вы определили правильный путь для файла form.js.

/* Enqueue Scripts */
add_action('wp_enqueue_scripts', 'custom_enqueue_scripts', 99);
function custom_enqueue_scripts(){

wp_register_script('custom-form', get_template_directory_uri() . '/js/form.js', 'jquery', '2.6.2');
wp_enqueue_script('custom-form');
// need to localize the script and add nonce because of spam submissions
wp_localize_script('custom-form', 'ajax_object', array('url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce("ajax_form_nonce")));
}

Опять же, я не включил здесь функции проверки. Вы можете включить их в тот же файл form.js.

0

Другие решения

Других решений пока нет …