Собственный PHPMail в модальном окне на Wordpress

185
06 февраля 2018, 10:03

Здравствуйте. Хотел бы сразу сказать, что популярные дополнения для WP с формами мне не подходят и поэтому ищу способ отправки собственных форм из модального окна.

Схема примерно следующая: На обычных страницах WP(page.php) подключён скрипт Fancybox, он и помогает с Popups. Они срабатывают по нажатию на кнопки с помощью jQuery. На самой странице есть код html-формы в скрытом виде, появляется только внутри модального окна. Дальше нужно эту форму отправлять на почту, но с этим пока сложно.

JS от формы:

$(document).ready(function() {
function validatePhone(phone7) {
    var reg =  /[0-9,\s]/i;
    return reg.test(phone7);
}
$("#calculation_form").submit(function() { return false; });
var pageurl = window.location.href;
$("#url2").val(pageurl);
$("#calculation_submit").on("click", function(){
    var phoneval    = $("#phone7").val();
    var phonevalid = validatePhone(phoneval);
    if(phonevalid == false) {
        $("#phone7").addClass("error");
    }
    else if(phonevalid == true){
        $("#phone7").removeClass("error");
    }
    $('#calculation_form .custom_checkbox').each(function() {
        if($(this).prop('checked')) {
            $(this).val('Да');
        }
    });
    if(phonevalid == true) {
        $.ajax({
            type: 'POST',
            url: '/script/phpmailer.php',
            data: $("#calculation_form").serialize(),
            success: function(data) {
                if(data == "true") {
                    $("#calculation_popup").fadeOut("fast", function(){
                        $(this).before("<div class='success_msg'>Ваша заявка успешно отправлена!<br>С Вами свяжутся в ближайшее время.</div>");
                        setTimeout("$.fancybox.close()", 3000);
                    });
                    $('#calculation_form').each(function(){
                        this.reset();
                    });
                }
            }
        });
    }
});
});

Собственно вопрос: каким образом связать action="" от формы с обычной страницы WP с phpmailer для отправки письма? Наверняка здесь есть подводные камни и нужно копаться в functions.php или учитывать особенность CMS.

На многих ресурсах(напр.) пишут, что похожее можно сделать с помощью admin-post.php, но я так понимаю нужно целиком форму вместе с html написать в PHP-файле и на странице WP, в модальном окне каким-то образом вызывать этот .php. Так же, есть множество англоязычных статей по поводу контактной формы без плагинов(напр.), но это всё же не то и мне не нужна одна конкретная страница. Это окно с формой должно использоваться на многих страницах.

Буду рад любой полезной информации. Мне не нужна полностью готовая практическая часть(хотя было бы не плохо), хотя бы теоретические действия, чтобы разобраться как это работает.

Answer 1

Собственно в ваших рассуждениях есть доля правды. Можно сделать так как вы говорите

  1. Вам можно создать страницу с алиасом (например "system-sendmail")
  2. Создаете файл в вашей текущей теме page-system-sendmail.php
  3. В патаметре url ajax запроса '/script/phpmailer.php' меняете на '/system-sendmail/' Вот собственно и всё

За вами остается:

  1. В page-system-sendmail.php подключить phpmailer
  2. Проверять входные параметры POST
  3. Добавить проверку на ajax
  4. Отправлять письмо

PS все можно сделать более нативным способом посредством движка WP. см хук wp_ajax_my_action (и по аналогии можете найти хуки, для иных условий).

Данный ответ передает моё личное видение решения задачи

READ ALSO
php preg_match помогите с выражением

php preg_match помогите с выражением

Нужно достать число от 4-6 символом из строки, что бы после неё не стояло через любое кол-во пробелов "руб" или "руб" Делаю так:

151
Кол-во колонок в таблице

Кол-во колонок в таблице

Как посчитать кол-во колонок в таблице с помощью php?

167
Как получить локальный ip адрес клиента?

Как получить локальный ip адрес клиента?

Хочу сделать небольшой опросник, в котором для уникальности каждого конкретного пользователя, используется его локальный ip-адресСайт находится...

189
Имитировать переход на сайт от лица сервера

Имитировать переход на сайт от лица сервера

Есть ссылка на сайт, перейдя по которой на сайте выполняется определенное действиеНа этот сайт открыт доступ только некоторым ip (моему серверу)...

173