Главная
Wordpress
Форма обратной связи без плагинов
  • 28 Мар 2014г
  • 1048
  • 4
  • Рубрика: Wordpress

Форма обратной связи без плагинов

Доброго времени суток!
Сегодня я хочу показать, как с помощью небольшого кода организовать у себя на сайте форму обратной связи. К тому же мы обойдемся без использования плагинов. Эту форму легко подключить в любом месте на вашем сайте.
Наша форма будет иметь 4 поля.
1. Имя
2. E-mail
3. Текст сообщения
Такую форму использую и я на этом сайте. И так приступим.

В админ панели в настройках > общие > должен быть указан e-mail адрес администратора, иначе форма не сможет отправить письмо

1. Создаем файл, со скриптом.

Создаем файл contacts.php и деоаем с него шаблон страницы по типу page.php. Выглядеть должно примерно так:

<?php
/*
Template Name: Страница Контакты
*/
?>
<?php get_header(); ?>

<?php get_footer(); ?>

2. Вставка кода обработки.

Перед

<?php get_header(); ?> 

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

<?php
if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
        $nameError = 'Введите ваше имя.';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
    }
 
    if(trim($_POST['email']) === '')  {
        $emailError = 'Введите вашу почту';
        $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
        $emailError = 'Вы ввели неправильный адрес.';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }
 
    if(trim($_POST['comments']) === '') {
        $commentError = 'Введите сообщение.';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
        } else {
            $comments = trim($_POST['comments']);
        }
    }
 
    if(!isset($hasError)) {
        $emailTo = get_option('tz_email');
        if (!isset($emailTo) || ($emailTo == '') ){
            $emailTo = get_option('admin_email');
        }
        $subject = 'Сообщение с Блога от пользователя '.$name;
        $body = "Имя: $name \n\nE-mail: $email \n\nСообщение: $comments";
        $headers = 'От: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Ответить: ' . $email;
        $headers = "Content-type: text/plain; charset=\"utf-8\"";
        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
 
} ?>

2. Вставка кода формы на сайте.

После

<?php get_header(); ?> 

вставляем код который выводит поля для заполнения на сайте:

	<?php if(isset($emailSent) && $emailSent == true) { ?>
   <div class="thanks">
      <p>Спасибо, ваше сообщение отправлено.</p>
   </div>
<?php } else { ?>
<?php if(isset($hasError) || isset($captchaError)) { ?>
   <p class="error">Извините, произошла ошибка.<p>
<?php } ?>
 <form action="<?php the_permalink(); ?>" id="contactForm" method="post">
   <ul class="contactform">
    <li>
      <label for="contactName">Имя:</label>
      <input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="required requiredField" />
      <?php if($nameError != '') { ?>
         <span class="error"><?=$nameError;?></span>
     <?php } ?>
    </li>
    <li>
      <label for="email">E-mail</label><input type="text" name="email" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="required requiredField email" />
      <?php if($emailError != '') { ?>
         <span class="error"><?=$emailError;?></span>
      <?php } ?>
    </li>
    <li>
      <label for="commentsText">Сообщение:</label>
      <textarea name="comments" id="commentsText" rows="20" cols="50" class="required requiredField"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
      <?php if($commentError != '') { ?>
         <span class="error"><?=$commentError;?></span>
      <?php } ?>
    </li>
    <li>
      <input type="submit"></input>
    </li>
  </ul>
      <input type="hidden" name="submitted" id="submitted" value="true" />
 </form>
<?php } ?>
	

Перед этим кодом или после него можно дописать

<?php the_content(); ?>

тогда вы сможете с админ панели дописывать информацию этой странице, например указать телефоны и оформить их.
Вот и все. Также можете прописать стили CSS в файле style.css и придать форме нужный вид. За стили отвечают следующие классы:

.thanks{} /* Это внешний вид сообщения об благополучной отправке*/
.error{} /* вид вывода ошибок */
.contactform {} /*А вот это уже внешний вид самой формы */

Надеюсь эта статья вам поможет.
На этом все. Спасибо за внимание 🙂




Если Вам был полезным мой труд, можете поддержать сайт, обменяться со мной текстовыми ссылками или посмотреть рекламку, что займет 2 минуты :)


Оцените статью
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(4 голоса, в среднем: 5 из 5)

Опубликовано 4 комментария

  • Юрий
    Комментариев: 4

    Добрый день! В поисках простенькой формы, остановился на этой и хочу сказать, что свою функцию отправки сообщения она выполняет исправно, пока тестирую на локале. Но у меня возникла трудность, т.к. моя задача разместить форму в модальном окне, то первый php-код я закинул в functions, ну а второй код вывода естественно в div модали, кнопка которого у меня в футере. И что я имею...Обязательные поля игнорируются, кликаю отправить и форма закрывается без предупреждения. Второе, форма заполненна корректно отправляется и доходит сообщение норм, но тоже, без "Спасибо, ваше сообщение отправлено." И третье, заполненные данные в полях остаются при повторном открытии модального окна. И еще, после отправки перекидывает на одну и ту же запись на сайте. Помогите плиз разобраться, что мне еще прикрутить к имеющемуся коду, чтоб подправить косяки, которые я описал.

    • Виталий
      Комментариев: 269

      Попробуйте первый код в отдельный файл, типа - mail.php. А в форме второго кода правильно указать путь к этому файлу - action="путь к файлу", сейчас там указанна ссылка на текущую страницу, то есть проверка срабатывает при обновлении.

      • Юрий
        Комментариев: 4

        1.Deprecated: Function eregi() is deprecated in
        2.Fatal error: Call to undefined function get_option() in
        Такие вот две ошибки после отправки получил) Первый код поместил в отдельный файл и вот так прописал <form action="<?php bloginfo('template_url'); ?>/mail_ukreal.php" id="contactForm" method="post">
        файл лежит в корневой папке темы.

        • Юрий
          Комментариев: 4

          Прикольчик, вставил назад первый код в functions и все норм отправляется)

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

Заполните поля ниже. Ваш e-mail не будет опубликован. Обязательные поля помечены *

Уважаемые пользователи! При добавлении комментариев на сайт Вам следует соблюдать правила указанные под формой отправки комментариев.

Соблюдайте добавления комментариев

Это не спам *

Нажмите, чтобы добавить код в комментарий