
Привет дорогие друзья! Последнее время пишу посты про WordPress. Не знаю, так получается, что устанавливаю себе то или иное и хочется поделиться этим с вами. В пятницу я пообещал написать статью, как сделать форму обратной связи на WordPress без плагинов. Вчера написать не получилось, потому как вышел другой пост, который меня попросили написать, а два поста в день, я не осилю. Ну то, что не успел вчера, пишу сегодня. Итак, делаем форму обратной связи WordPress без плагинов.
Ранее для этих целей я использовал плагин Contact Form 7. Плагин многофункциональный, поддерживает создание нескольких форм обратной связи wordpress. Но постепенно я начал отказываться от плагинов, именно поэтому сейчас пытаюсь все реализовывать с помощью функций. Используя WordPress мы даже не подозреваем, сколько функций у него есть, и многими из них мы не пользуемся.
Создать форму обратной связи очень легко. Для начала возьмите файл page.php вашей темы и создайте его копию. Переименовываем копию, допустим на feedback.php. Это будет нашим файлом для формы обратной связи. Посмотрим содержимое. У меня внутренности файла такие:
<?php get_header(); ?>
<div id="content">
<div id="column">
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h1><?php the_title(); ?></h1>
<?php the_content('Читать дальше →'); ?><div class="clear"></div>
<?php wp_link_pages(array('before' => '<p><strong>Страницы:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php get_sidebar(); ?>
<div class="clear"></div>
</div>
<?php get_footer(); ?>
У всех содержимое может отличаться, но это не большая проблема, потому что делается все по аналогии. Нам нужно убрать главное содержимое этого фала и при этом оставить главные дивы. Опять обратимся к коду моего feedback.php. Мне нужно убрать следующее
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h1><?php the_title(); ?></h1>
<?php the_content('Читать дальше →'); ?><div class="clear"></div>
<?php wp_link_pages(array('before' => '<p><strong>Страницы:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
и при этом я оставляю
<div id="content"> <div id="column">
ну и конечно же оставляю коды вывода шапки, сайтбара и подвала. Далее в самом-самом начале прописываем:
<?php /* Template Name: Форма обратной связи */ ?>
этот код нам понадобится в самом конце, для создания страницы. И сразу после него вставляем
<?php
if(isset($_POST['submitted'])) {
if(trim($_POST['contactName']) === '') {
$nameError = 'Введите ваше имя.';
$hasError = true;
} else {
$name = trim($_POST['contactName']);
}
if(trim($_POST['email']) === '') {
$emailError = 'Введите e-mail адрес.';
$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;
}
} ?>
Это главные настройки, где определяется e-mail на который будут отправляться сообщения, с какого текста они будут начинаться, что будет выскакивать при неправильном вводе емэйла, имени и т.д.
Так, пришло время сделать саму форму обратной связи wordpress. Для этого в том месте где удаляли текст добавляем
<?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 } ?>
Сохраняем файл. Мы уже все практически сделали. Теперь осталось вывести данную страницу на блог. Для этого заходим в админку блога и создаем новую страницу, пишем ей имя и после этого самое главное. В правой колонке находим панель «Атрибуты страницы», а в разделе «Шаблон» выбираем: «Форма обратной связи». Вот теперь точно все. Заходите на страницу и увидете форму обратной связи. Оформлена она будет на очень хорошо, но если поработать в style.css можно ее привести в прилежный вид. Кстати, вот вам стили которые мы использовали
.thanks{} /* Стиль сообщения об успешной отправке */
.error{} /* Вывод ошибок */
.contactform ul, .contactform li {} /*Соответственно, стиль списка формы */
Толстая ссылка: archi.ru/forum/ (тИЦ=1800, PR=1) – для получения обратной ссылки регистрируемся и оставляем ссылку в профиле.
На одном блоге наткнулся на обзор сервиса http://sitepolice.ru/. Все его сильно хвалили. Ну раз отзывы положительные пришлось попробовать. Решил заказать «Аудит сайта» всего лишь за 800 рублей. Проверили множество параметров сайта, но самое главное получил рекомендации по улучшение сайта. Это меня очень порадовало. Так что советую — пользуйтесь.
Похожие записи:


Спасибо, всё очень подробно написано
Поставлю себе такую.
рад что помог.
Добрый день!
Напишите ещё, пожалуйста, как правильно сделать постраничную навигацию без плагинов.
Спасибо большое за разъяснения! Я тоже постепенно стараюсь заменять плагины на код везде, где это возможно.
К Вам, Александр, просьба в связи с этим
Вот здесь я код нашла http://ruseller.com/lessons.php?rub=40&id=744
но мне, как юзерю нифига не понятно что писать в файл functions.php и как потом эту функцию выводить в нужную часть index.php
не за что. да, я собирался на эту тему тоже писать. Пост будет примерно, среда-пятница
У меня заработало почти сразу!
это именно то что мне нужно. и еще я узнал что модно делать свои шаблоны страниц.
Респект тебе и уважуха, Чел!
Подскажите, а у меня в разделе атрибуты страницы нет поля шаблон. Только — родитель
Ирина, это значит что ваш шаблон не поддерживает данную функцию (подключение внешнего фала)
Молодца автор.Единственная наверно форма которая работает без проблем,уже кучу перепробовал.Плагины отметаются сразу.
Если вместо этого:
Отправить сообщение
написать
То форма будет валидной) Это для тех кто следит конечно же за валидацией)
Если вместо этого:
input type = «submit»Отправить сообщение/input
написать
input type = «submit» /
То форма будет валидной) Это для тех кто следит конечно же за валидацией)
html ка не прошла, прошлый коммент лучше удалить)
[...] когда-то пользовался этим и этим Все подробно [...]
[...] внешний файл к странице. Это было описано в статье форма обратной связи wordpress без плагинов. Дабы вам не метаться по той статье и не [...]
Привет. Упорно не хочет работать данная схема. Выдает ошибку
Parse error: syntax error, unexpected T_ENDWHILE in /var/www/a20587/data/www/hudeemsnami.ru/wp-content/themes/kremjam/feedback.php on line 96
на этой строчке находится что удалять нельзя, да и удаляя нет эффекта. Прошу помочь разобраться. Спасибо.
пришлите мне на e-mail (в контактах есть) содержимое файла и через какую программу вы ее открываете.
Спасибо, добрый человек!
Как раз искал как новый шаблон создать)
Спасибо большое! Но у меня вопрос:
Адрес получателя сообщения прописывается в коде модуля, или берется из Настроек Админки WP?
Если в коде пишут адрес получателя, объясните, пожалуйста где?
Сначала пробует взять из опции tz_email, если там не заполнено, то из опции admin_email — где храниться email админа.
if(!isset($hasError)) { $emailTo = get_option(‘tz_email’); if (!isset($emailTo) || ($emailTo == ») ){ $emailTo = get_option(‘admin_email’); }
Ещё раз Спасибо большое!
Не ожидал такой оперативности с ответом. Просто локально на Денвере идет сообщение в заглушку…
Буду внедрять Ваш труд на сайт. У вас очень полезная и нужная информация.
Благодарю!
Здравствуйте! Сделал все как Вы описали. Загрузил страницы на реальный сервер. Все работает, ошибок нету.
НО ! Письма по реальному адресу не приходят
Напишите, пожалуйста кусок кода где именно нужно вставить адрес получателя.
И ещё: Как зафиксировать или ограничить резиновое поле ввода сообщения?
Оно классно и интересно, но несколько ломает структуру сайта.
Спасибо!
Видимо нужно мне пересмотреть код, потому что много стало сообщений поступать, что не работает эта форма. А фиксировать можно через css. Для начала прописаnm класс для input textarea и потом для этого класса в css файле прописать max-width:значение в пикселях.
Как на счёт работоспособности кода? Где собака порылась? Почему не доходит сообщение адресату? Куда вставить реальный е-меил?
Тут пришла идея… это же блого- СМS может использовать для этой цели комменты?
Спасибо большое! Отлично работает и так же отлично вписалась форма в сайт. Вот только я не разобрался — на эту страничку текст совсем нельзя добавить? И как со спамом? Будет приходить?
«В правой колонке находим панель «Атрибуты страницы», а в разделе «Шаблон» выбираем: «Форма обратной связи»»
У меня в шаблонах НЕТ «Форма обратной связи»
, можно её как-нибудь добавить?
Спасибо за форму.
письма уходят, но после нажатия на «Отправить запрос», во-первых не происходит никакой проверки на корректность введенных данных и, во -вторых, не появляется «сообщение отправлено».
просто перерисовывается форма.
такое впечатление, что переменные сбрасываются
А почему у Вас такая не стоит ?
apisklov.ru потрясающ. Спасибо и успехов в работе!
Вопрос по форме обратной связи. В PHP не силен. Как переписать условие чтобы одно поле (у меня commentsText) не было обязательным.
[...] написать то что вам удобно. У меня написано Показать форму обратной связи и Скрыть форму обратной связи, так как использую [...]
А получится к ней прикрутить jquery, чтобы была во всплывающем окне?
хотя наверняка можно
У меня есть еще один вопрос, буду рада, если поделишься ответом
Попробую внятно описать, но не уверена, что удастся
Помимо тех переменных, которые уже есть в скрипте, мне нужн добавить свои (но не в этом трудность)). — И при нажатии на ссылку, необходимо, чтобы некоторые value были присвоены.
Допустим — если вызвать форму в одном месте блога (перейти по ссылке), то value всегда будет заполнено «Мальвина», а если перейти по другой ссылке, то всегда будет «Буратино»
В этой же форме еще и select нужн..
В общем — целая махина))
И вот сам вопрос: можно каким-то образом вместе с ссылкой передавать значение value?
Заранее большущее спасибо
Через get параметры передавать в ссылке и затем вставлять hidden элемент в форму
там, где ссылка по идее:
<form action="» id=»contactForm» method=»post»>
<input type="hidden" name="contactName" value="» />
Ссылка на стр с «Мальвина»
в коде формы не могу понять как менять:
Имя:
<input type="text" name="contactName" id="contactName" value="» class=»required requiredField» />
извиняюсь, если совсем глупость написала.( но еще и наоборот — hidden надо передавать или получать?
Привет, вопрос простой как добавить чекбоксы и проверку к ним, ато таких статей куча как на английском так и переводов а вот про например внедрения и проверки четырех чекбоксов ниче не пишут
У меня проблема с кодировкой((( все русские буквы в виде кракозябр отображаются… что сделать, чтобы все нормально отображалось?
Здравствуйте! Не подскажите как вставить туда select? Надо чтобы я выбрала из выпадающего списка значение, и это значение отправилось в сообщении
проблема с кодировкой исчерпана)) все работает))
Да, без плагинов — это то, что нужно. Кстати, я нашла полезную статью о формах обратной связи, крайне рекомендую: http://templates.motocms.ru/blog/obzory/pogovorim-o-formax-obratnoj-svyazi/ много хорошей информации.
Как переписать условие чтобы одно поле (у меня commentsText) не было обязательным.