Задать вопрос
@goshatravin

Почему после натяжки сайта на wp перестали работать все формы обратной связи?

Переверстал сайт на wp и к дикому сожалению понял , что все формы перестали работать .
Есть файл mail.php ( уже добавил его как страницу wp ) он отправляется файлом ajax код ниже
при попытки отправки пишет что не найдена страница именно mail.php , если прописать ее в строке браузера отправится пустое письмо , что говорит что она функционирует , не работает именно отправка !
Как правильно настроить ajax.ja в wp ? подскажите , менять url: "mail.php", думал пробелма в пути , но это тоже оказалось не то !
$(document).ready(function() {

	$("#form").submit(function() {
		$.ajax({
			type: "POST",
			url: "mail.php",
			data: $(this).serialize()
		}).done(function() {
			// $('.php-over').css({ display: "flex" });
			// $('#form').css({ display: "none" });
			// $('.pplus').css({ display: "none" });
			$('.modaloverlay').css({display: "block"});
			//  $("#form").trigger("reset");
		});
		return false;
	});
е
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Softer
@Softer
url: "mail.php",
А с какой страницы вызывается (URL)? Скорее всего вопрос в относительном пути.
Ответ написан
Комментировать
ya-vitaliy
@ya-vitaliy
Верстаю... + wordpress и пробую Laravel
Работа с ajax в вп немного отличается.
1. нужно url указать:
url: '/wp-admin/admin-ajax.php',
2. нужно указать action в data:
data:{
    action: 'my_function',
    form_data: $("#form").serialize()
 }

это названии функции которая будет обработчиком.
3. В файле functions.php темы нужно зарегистрировать функцию обработчик (которую указали в js)
add_action('wp_ajax_my_function', 'my_function');
add_action('wp_ajax_nopriv_my_function', 'my_function');
function my_function() {
// здесь обработка данных отправка писем
}

К примеру, что-то похожее делал js выглядел так:
function sendDataEmail(email, problem, id_game){

        $.ajax({
            type:'POST',
            url:'/wp-admin/admin-ajax.php',
            data: {
                action: 'ajax_send_problem',
                email: email,
                problem: problem,
                id_game: id_game
            },
            success: function (response) {
                console.log(response);
            },
            error: function () {
                alert('AJAX ERROR');
            }
        });
    }

А php так:
add_action('wp_ajax_send_problem', 'ajax_send_problem');
add_action('wp_ajax_nopriv_ajax_send_problem', 'ajax_send_problem');
function ajax_send_problem() {

    $result = null;

    if(isset($_POST['email']) and isset($_POST['problem']) and $_POST['id_game']){

        $email = trim(strip_tags($_POST['email']));
        $problem = trim(strip_tags($_POST['problem']));
        $id_game = trim(strip_tags($_POST['id_game']));

        $title_slot = get_the_title($id_game);
        $link_slot = get_the_permalink($id_game);

        /*------create email massage----*/
        $to = get_option('admin_email');
        $subject = "Problem game in slot: ".$title_slot;

        if($email){
            $email = 'name@emptymail.com';
        }

        $massage = "<p><b>Slot error:</b> $problem</p>";
        $massage .= "<p><b>Slot:</b> <a href='".$link_slot."'>$title_slot</a></p>";
        $massage .= "<p><b>Date:</b> ".date('d.m.Y')."</p>";

        $headers = "Content-Type: text/html; charset=utf-8; \n\r From: User SlotsSpot <".$email.">" . "\r\n";

        $result = wp_mail($to, $subject, $massage, $headers);

        if($result){
            echo 'send';
        }else{
            echo 'not send';
        }
        exit();

    }else{
        return $result =  'error';
    }
}

Далее уже сами, по этому примеру можете переделать и свой код.
Ответ написан
Напиши полный путь к mail.php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы