2017-02-14 2 views
0

Я решил задать этот вопрос, потому что на него нет простого ответа. У меня есть форма контакта в моем home.php, который выглядит как:

HTML:

<form id="js-calculator" name="calculator" action="" method="post"> 
    <input type="email" name="email" id="email" placeholder="E-mail" /> 
    <input type="tel" name="phone" id="phone" placeholder="Phone" /> 
    <textarea name="message" id="message" placeholder="Message"></textarea> 
    <label for="accept"><input class="" type="checkbox" id="accept" name="accept" /> I agree to terms and conditions</label> 
    <button type="submit" id="send__btn">Wyślij wycenę</button></p> 
</form> 

JavaScript:

jQuery(document).ready(function ($) { 
    $('#js-calculator').submit(function (e) { 
    e.preventDefault(); 
    var $this = $(this); 
    $.ajax({ 
     url: '<?php echo admin_url("admin-ajax.php") ?>', 
     type: 'post', 
     dataType: 'JSON', 
     data: $this.serialize() 
     } 
    }); 
    }); 
}); 

PHP в functions.php

// Function to send emails 
    function sendMail() { 
    $subject = 'Automatic evaluation'; 
    $headers = 'From: My Website Contact Form <[email protected]>'; 
    $send_to = "[email protected], ". $_POST['email']; 
    $subject = "Evaluation for ". $_POST['name']; 
    $message = "Message from ".$_POST['message']; 
    } 
    add_action('wp_ajax_sendhtmlmail', 'sendMail'); 
    add_action('wp_ajax_nopriv_sendhtmlmail', 'sendMail'); 

    add_filter('wp_mail_content_type', 'set_content_type'); 
    function set_content_type($content_type) { 
    return 'text/html'; 
    } 

    // Function to update DB 
    function addCustomer(){ 
    global $wpdb; 

    $phone = $_POST['phone']; 
    $email = $_POST['email']; 
    $accept = $_POST['accept']; 

    if($wpdb->insert('customers',array(
    'phone'=>$phone, 
    'email'=>$email, 
    'accept'=>$accept 
))===FALSE){ 
    echo "Error"; 
} else { 
    $wpdb->insert_id;  
} 
die(); 
} 
add_action('wp_ajax_addCustomer', 'addCustomer'); 
add_action('wp_ajax_nopriv_addCustomer', 'addCustomer'); 

Что Я хотел бы достичь: 1. Отправьте HTML-письмо клиенту и t o веб-сайт admin, 2. Добавить данные клиента в базу данных, проверить, существует ли электронная почта, 3. иметь безопасные соединения и поток данных;

Прямо сейчас я понятия не имею, что я сделал неправильно ... Любая помощь будет очень признательна.

+0

скопировали вы ваш PHP правильно? Он неверно отформатирован в вопросе, потому что ваш PHP недействителен: '$ subject = 'Автоматическая оценка;' <- отсутствует закрытие '' '. –

+0

Ваш код не включает функцию 'wp_mail()', поэтому он не собирается отправлять какие-либо письма. Вам нужно предоставить лучшее описание того, что не работает. Существует ли конкретный аспект, который не работает? –

+0

Да, вы правы @KirkBeard, мне нужно обновить весь вопрос. –

ответ

0

Вы почти там, пара вещей:

В вашем JS AJAX вызова, необходимо указать действия для вызова, здесь модифицированную вызов:

jQuery(document).ready(function ($) { 
    $('#js-calculator').submit(function (e) { 
     e.preventDefault(); 
     var $this = $(this); 
     $.ajax({ 
     url: '<?php echo admin_url("admin-ajax.php?action=sendhtmlmail") ?>', 
     type: 'post', 
     dataType: 'JSON', 
     data: $this.serialize() 
     } 
     }); 
    }); 
    }); 

Теперь давайте посмотрим на PHP функции:

// Function to send emails 
function sendMail() { 
    $data = array(
    'email' = sanitize_email($_POST['email']), 
    'name' = sanitize_text_field($_POST['name']), 
    'message' = sanitize_text_field($_POST['message']), 
); 
    $subject = 'Automatic evaluation; 
    $headers = 'From: My Website Contact Form <[email protected]>'; 
    $send_to = "[email protected], ". $data['email']; 
    $subject = "Evaluation for ". $data['name']; 
    $message = "Message from ".$data['message']; 
    wp_mail($send_to, $subject, $message, $headers); 
    addCustomer($data); 
    // TODO: Fill in this $response array with meaninfull data (check output from wp_mail and addCustomer) 
    $response = array(
    'success' => true 
); 
    wp_send_json($response); 
} 
add_action('wp_ajax_sendhtmlmail', 'sendMail'); 
add_action('wp_ajax_nopriv_sendhtmlmail', 'sendMail'); 

Просто отсутствует wp_mail вызов и очистку входов, я удалил свой другой Ajax вызов, и имеют функцию Sendmail просто передают данные в удовольствие addCustomer фикция. Вы заметите вызов wp_send_json, это для отправки ответа на JS. https://codex.wordpress.org/Function_Reference/wp_send_json

Теперь давайте посмотрим на вашу функцию addCustomer:

// Function to update DB 
function addCustomer($data){ 
    global $wpdb; 

    $phone = $data['phone']; 
    $email = $data['email']; 
    $accept = $data['accept']; 

    if($wpdb->insert('customers',array(
     'phone'=>$phone, 
     'email'=>$email, 
     'accept'=>$accept 
    ))===FALSE){ 
    return false; 
    } else { 
    return $wpdb->insert_id; 
    } 
} 

Единственное, что изменить здесь, это возвращение, так что абонент знает, если это не удалось.

Для обработки входных сигналов от пользователя, проверить этот документ от WordPress и основных функций: https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data


Или вы можете использовать следующие плагин вместе:

Вот как это использовать: https://contactform7.com/save-submitted-messages-with-flamingo/

Надеюсь, это вам поможет! С уважением,

P.S WordPress вопросы лучше подходит здесь: https://wordpress.stackexchange.com/

+0

Большое спасибо за вашу помощь. Погоняй прямо сейчас, я тебе сообщу. ура –

Смежные вопросы