Форма обратной связи в два шага и без использования плагинов. С антиспамом само собой.

Очередной пост по просьбе моих читателей, в нём мы пошагово разберём, как на своём сайте создать отличную форму обратной связи без использования плагинов. Всего будет два шага.

Шаг 1. Страница с формой

Создаём в папке с темой новый файл — это будет шаблон страницы с формой. Файл можно назвать как угодно, нам важно лишь его содержимое.

<?php
/* 
 * Template name: Форма обратной связи
 */
get_header(); // эта строчка кода у вас может отличаться
 
/*
 * Тут мы будем обрабатывать ошибки и выводить соответствующие сообщения
 */
if( isset( $_GET['msg'] ) ) {
    // в случае успеха
    if( $_GET['msg'] == 'success' )
        echo '<span>Сообщение успешно отправлено</span>';
 
    // в случае ошибки
    if( $_GET['msg'] == 'error' )
        echo '<span><strong>Ошибка:<strong> Проверьте правильность введённых вами данных.</span>';
    // вы сами можете добавить различные другие сообщения об ошибках
 
}
 
/* 
 * Антиспам-трюк
 * у нас есть два фейковых поля, при заполнении которых прерывается выполнение скрипта
 * сделаем так, чтобы они были скрыты для пользователей при помощи CSS
 */
echo '<style>textarea[name="comment"],textarea[name="message"]{display:none}</style>';
?>
    <form action="<?php echo site_url() ?>/send.php" method="POST">
        <input type="text" name="name" required="true" placeholder="Имя *" />
        <input type="text" name="email" required="true" placeholder="Email *" />
        <textarea name="comment"></textarea>
        <textarea name="message"></textarea>
        <textarea name="soobschenie" required="true" placeholder="Сообщение *"></textarea>
        <button>Отправить</button>
    </form>
<?php
get_footer();  // эта строчка кода у вас может отличаться

Шаг 2. Файл-обработчик. Отправка формы

В этой статье в качестве файла-обработчика я создал новый файл send.php прямо в директории установки WordPress, но вы можете поместить его и в тему без проблем.

<?php
// проверка на спам - просто прерываем выполнение кода, при желании можно и сообщение спамерам вывести
if( isset( $_POST['comment'] ) || isset( $_POST['message'] ) )
    exit;
 
// подключаем WP, можно конечно обойтись без этого, но зачем?
require( dirname(__FILE__) . '/wp-load.php');
 
// следующий шаг - проверка на обязательные поля, у нас это емайл, имя и сообщение
if( isset( $_POST['name'] )
  && isset( $_POST['email'] ) && is_email( $_POST['email'] ) // is_email() - встроенная функция WP для проверки корректности емайлов
  && isset( $_POST['soobschenie'] ) ) {
 
    $headers = array(
        "Content-type: text/html; charset=utf-8",
        "From: " . $_POST['name'] . " <" . $_POST['email'] . ">"
    );
 
    if( wp_mail( get_option('admin_email'), 'Сообщение с сайта', wpautop( $_POST['soobschenie'] ), $headers ) ) {
        header('Location:' . site_url('/contact?msg=success') );
        exit;
    }
 
 
}
 
header('Location:' . site_url('/contact?msg=error') );
exit;

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: