PHP-форма обратной связи для WordPress

Для WordPress создано не мало плагинов, которые создают формы обратной связи на сайтах. Плагины в свою очередь создают большие нагрузки на сайт и сервер. Поэтому, если есть возможность, то лучше отказаться от использования плагина.

Предлагаю Вам проверенный php код такой формы обратной связи.

Не буду описывать всю структуру кода, лучше подробнее опишу как этот код вставить. На первый взгляд для новичков покажется всё сложным. Но на самом деле всё просто. Буду описывать всё с картинками.

Сам код выглядит следующим образом:

<?php
if(isset($_POST[‘submitted’])) {
    if($_POST[‘comments1’] != ») {
        die(«Get out!»);
    }     if(trim($_POST[‘contactName’]) === ») {
        $nameError = ‘Пожалуйста, введите ваше имя.’;
        $hasError = true;
    } else {
        $name = trim($_POST[‘contactName’]);
    }     if(trim($_POST[’email’]) === »)  {
        $emailError = ‘Пожалуйста, введите адрес вашей электронной почты.’;
        $hasError = true;
    } else if (!preg_match(«/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,4}$/i», trim($_POST[’email’]))) {
        $emailError = ‘Адрес электронной почты некорректный.’;
        $hasError = true;
    } else {
        $email = trim($_POST[’email’]);
    }     if(trim($_POST[‘subject’]) === ») {
        $subject = ‘Сообщение с сайта’;
    } else {
        $subject = stripslashes(trim($_POST[‘subject’]));
    }     if(trim($_POST[‘comments’]) === ») {
        $commentError = ‘Пожалуйста, введите ваше сообщение.’;
        $hasError = true;
    } else {
        $comments = stripslashes(trim($_POST[‘comments’]));
    }     if(!isset($hasError)) {
        $emailTo = get_option(‘tz_email’);
        if (!isset($emailTo) || ($emailTo == ») ){
            $emailTo = get_option(‘admin_email’);
        }
        // тут можно железно установить почту для отправки письма, например так:
        // $emailTo = ‘admin@site.ru’;
        $body = «Имя: $name nnEmail: $email nnСообщение: $comments«;
        $headers = ‘From: ‘.$name.‘ <‘.$emailTo.‘>’ . «rn« . ‘Reply-To: ‘ . $email;         wp_mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
        unset($_POST);
    } } ?>

<div id=»container»>
    <div id=»content»>
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div <?php post_class() ?> id=»post-<?php the_ID(); ?>«>
            <h1 class=»entry-title»><?php the_title(); ?></h1>
            <div class=»entry-content»>
            <?php if(isset($emailSent) && $emailSent == true) { ?>
                <div class=»thanks»>
                    <p>Спасибо за ваше письмо. Я постараюсь как можно скорее на него ответить.</p>
                </div>
            <?php } else { ?>
                <?php the_content(); ?>
                <?php if(isset($hasError)) { ?>
                    <p class=»error»>Извините, но отправить письмо не удалось. Возможно вы допустили ошибки при заполнении формы.<p>
                <?php } ?>
            <?php } ?>

            <form action=»<?php the_permalink(); ?>» id=»contactForm» method=»post»>
                <p>Ваше имя (обязательно):<br />
                    <input type=»text» name=»contactName» id=»contactName» class=»required» value=»<?php if(isset($_POST[‘contactName’])) echo $_POST[‘contactName’];?>» />
                    <?php if(isset($nameError) && $nameError != ») { ?>
                        <span class=»error»><?=$nameError;?></span>
                    <?php } ?>
                </p>

                <p>Ваш E-Mail (обязательно):<br />
                    <input type=»text» name=»email» id=»email» class=»required email» value=»<?php if(isset($_POST[’email’])) echo $_POST[’email’];?>» />
                    <?php if(isset($emailError) && $emailError != ») { ?>
                        <span class=»error»><?=$emailError;?></span>
                    <?php } ?>
                </p>

                <p>Тема:<br />
                    <input type=»text» name=»subject» id=»subject» value=»<?php if(isset($_POST[‘subject’])) echo $_POST[‘subject’];?>» />
                </p>

                <p>Сообщение (обязательно):<br />
                    <textarea name=»comments1″ id=»commentsText1″ rows=»20″ cols=»30″ class=»required»></textarea>
                    <script>
                        window.onload = function(){
                            document.getElementById(‘commentsText1′).style.display =’none’;
                        }
                    </script>
                    <textarea name=»comments» id=»commentsText» rows=»20″ cols=»30″ class=»required»><?php if(isset($_POST[‘comments’])) { if(function_exists(‘stripslashes’)) { echo stripslashes($_POST[‘comments’]); } else { echo $_POST[‘comments’]; } } ?></textarea>
                    <?php if(isset($commentError) && $commentError != ») { ?>
                        <span class=»error»><?=$commentError;?></span>
                    <?php } ?>
                </p>
                <input type=»submit» class=»button» value=»Отправить сообщение»/>
                <input type=»hidden» name=»submitted» id=»submitted» value=»true» />
            </form>
        </div>
    </div>
<?php endwhile; endif; ?>
</div>
</div>

На первый взгляд что-то очень страшное. Для для функционирования этого кода и вывода формы обратной связи необходимо сделать индивидуальный шаблон для страницы на которой будет выводиться  эта форма. Это делается очень просто, достаточно в каком-то текстовом текстовом редакторе (я делал в блокноте) написать такой код:

<?php
/*
Template Name: Mail
*/

?>

.где Mail — это будет названием шаблона. Потом эту запись в блокноте надо будет сохранить в файл mail.php и можно загружать в корень сайта. Но не спешите, это еще чистый шаблон. Будем собирать его по частям. Надо сделать так, чтобы этот шаблон не отличался от основного, т.е. чтобы выводилась шапка, сайтбары, футер.

Для этого зайдите в админку сайта, пройдите в Редактор и откройте файл page.php. Скопируйте содержимое и вставьте в блокнот ниже первой записи. Буду показывать на примере своего файла.

<?php
/*
Template Name: Mail
*/

?>

<?php get_header(); ?>
<?php get_sidebar(‘top’); ?>
<?php if (have_posts()) {
/* Start the Loop */
while (have_posts()) {
the_post();
get_template_part(‘content’, ‘page’);
/* Display comments */
if (theme_get_option(‘theme_allow_comments’)) {
comments_template();
}
}
} else {
theme_404_content();
}
?>
<?php get_sidebar(‘bottom’); ?>
<?php get_footer(); ?>

Теперь будем вставлять код формы. Он ставится двумя частями. Первую часть ставим перед кодом вывода шапки <?php get_header(); ?>, а вторую после этого кода. Для наглядности всё в разных цветах:

<?php
/*
Template Name: Mail
*/

?>

<?php
if(isset($_POST[‘submitted’])) {
if($_POST[‘comments1’] != ») {
die(«Get out!»);
} if(trim($_POST[‘contactName’]) === ») {
$nameError=»Пожалуйста, введите ваше имя.»;
$hasError = true;
} else {
$name = trim($_POST[‘contactName’]);
} if(trim($_POST[’email’]) === ») {
$emailError=»Пожалуйста, введите адрес вашей электронной почты.»;
$hasError = true;
} else if (!preg_match(«/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,4}$/i», trim($_POST[’email’]))) {
$emailError=»Адрес электронной почты некорректный.»;
$hasError = true;
} else {
$email = trim($_POST[’email’]);
} if(trim($_POST[‘subject’]) === ») {
$subject=»Сообщение с сайта»;
} else {
$subject = stripslashes(trim($_POST[‘subject’]));
} if(trim($_POST[‘comments’]) === ») {
$commentError=»Пожалуйста, введите ваше сообщение.»;
$hasError = true;
} else {
$comments = stripslashes(trim($_POST[‘comments’]));
} if(!isset($hasError)) {
$emailTo = get_option(‘tz_email’);
if (!isset($emailTo) || ($emailTo == ») ){
$emailTo = get_option(‘admin_email’);
}
// тут можно железно установить почту для отправки письма, например так:
$emailTo = ‘admin@site.ru‘;
$body = «Имя: $name nnEmail: $email nnСообщение: $comments»;
$headers=»From: «.$name.’ <‘.$emailTo.’>’ . «rn» . ‘Reply-To: ‘ . $email;

wp_mail($emailTo, $subject, $body, $headers);
$emailSent = true;
unset($_POST);
}

} ?>

<?php get_header(); ?>

<div id=»container»>
<div id=»content»>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div <?php post_class() ?> id=»post-<?php the_ID(); ?>»>
<h1 class=»entry-title»><?php the_title(); ?></h1>
<div class=»entry-content»>
<?php if(isset($emailSent) && $emailSent == true) { ?>
<div class=»thanks»>
<p>Спасибо за ваше письмо. Я постараюсь как можно скорее на него ответить.</p>
</div>
<?php } else { ?>
<?php the_content(); ?>
<?php if(isset($hasError)) { ?>
<p class=»error»>Извините, но отправить письмо не удалось. Возможно вы допустили ошибки при заполнении формы.<p>
<?php } ?>
<?php } ?> <form action=»<?php the_permalink(); ?>» id=»contactForm» method=»post»>
<p>Ваше имя (обязательно):<br />
<input type=»text» name=»contactName» id=»contactName» class=»required» value=»<?php if(isset($_POST[‘contactName’])) echo $_POST[‘contactName’];?>» />
<?php if(isset($nameError) && $nameError != ») { ?>
<span class=»error»><?=$nameError;?></span>
<?php } ?>
</p> <p>Ваш E-Mail (обязательно):<br />
<input type=»text» name=»email» id=»email» class=»required email» value=»<?php if(isset($_POST[’email’])) echo $_POST[’email’];?>» />
<?php if(isset($emailError) && $emailError != ») { ?>
<span class=»error»><?=$emailError;?></span>
<?php } ?>
</p> <p>Тема:<br />
<input type=»text» name=»subject» id=»subject» value=»<?php if(isset($_POST[‘subject’])) echo $_POST[‘subject’];?>» />
</p> <p>Сообщение (обязательно):<br />
<textarea name=»comments1″ id=»commentsText1″ rows=»20″ cols=»30″ class=»required»></textarea>
<script>
window.onload = function(){
document.getElementById(‘commentsText1′).style.display =’none’;
}
</script>
<textarea name=»comments» id=»commentsText» rows=»20″ cols=»30″ class=»required»><?php if(isset($_POST[‘comments’])) { if(function_exists(‘stripslashes’)) { echo stripslashes($_POST[‘comments’]); } else { echo $_POST[‘comments’]; } } ?></textarea>
<?php if(isset($commentError) && $commentError != ») { ?>
<span class=»error»><?=$commentError;?></span>
<?php } ?>
</p>
<input type=»submit» class=»button» value=»Отправить сообщение»/>
<input type=»hidden» name=»submitted» id=»submitted» value=»true» />
</form>
</div>
</div>
<?php endwhile; endif; ?>
</div>
</div>

<?php get_sidebar(‘top’); ?>
<?php if (have_posts()) {
/* Start the Loop */
while (have_posts()) {
the_post();
get_template_part(‘content’, ‘page’);
/* Display comments */
if (theme_get_option(‘theme_allow_comments’)) {
comments_template();
}
}
} else {
theme_404_content();
}
?>
<?php get_sidebar(‘bottom’); ?>
<?php get_footer(); ?>

Теперь найдите в верхней части кода формы строчки:

// тут можно железно установить почту для отправки письма, например так:
$emailTo = ‘admin@site.ru‘;

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

Теперь страница стала готовой. Сохраняем всё это в файл mail.php и загружаем его в корень сайта. После этого в Редакторе админки Вы увидите справа на ряду со всеми файлами и файл mail.php.

Откройте свой файл style.css и добавьте небольшой код, с помощью которого можно изменять размеры формы связи:

#contactName{
width:100%;
}
#email{
width:100%;
}
#subject{
width:100%;
}
#commentsText{
width:100%;
}
span.error{
color:red;
}

Ну и остаётся сделать так, чтобы эта форма обратной связи выводилась на странице. Создайте новую страницу, в поле никаких кодов вставлять не надо, только напишите её название, к примеру Контакты. Справа в графе Атрибуты страницы выберите вновь созданный шаблон:

атрибуты страницы

Опубликуйте страницу и пробуйте отправлять себе сообщения. Признаюсь честно, что у меня некоторое время сообщения отправлялись, но не принимались и не знаю почему. Но через несколько попыток всё заработало. Причины этого я так и не узнал.

 

Статья была полезной?