
Форма обратной связи для отправки сообщений администраторам присутствует практически на каждом сайте. Вордпресс предлагает массу решений с установкой плагинов, от самых маленьких как «WP Simple Mail Sender», до динозавров типа «Contact Form 7». Но если нужна простенькая и симпатичная форма отправки сообщений, зачем нужны мощные плагины?
Это несложная задача. Необходимо написать крохотный шаблон под page на WordPress и php обработчик для отправки сообщений. В файл шаблона в качестве комментария вносятся строки:
/* Template name: Форма обратной связи */
Шаблон отображается в админке, выберите его из списка, и форма обратной связи готова.
Разместите в корневой директории Вашей темы два нижеприведенных файла, и все, форма обратной связи на Вашем сайте установлена, и не нужно ставить плагин.
<?php
function clear($str){
$p=strpos($str,"?");
if ($p===false) return $str;
else return substr($str,0,$p);
}
/*
Template name: Форма обратной связи
*/
get_header();
?>
<main>
<?php if(have_posts()):while(have_posts()):the_post();?>
<header class="header">
<br><h1 class="entry-title"><?php the_title();?></h1>
</header>
<div class="block-agreement">
<input type="checkbox" id="agreement" onchange="document.getElementById('sendmessage').disabled = !this.checked;">
<label for="agreement"><span><?php echo "Я полностью согласен/согласна на отправку моих персональных данных, с";?><a target="_blank" href="/politika-konfidentsialnosti" rel="noopener"><?php echo " с политикой конфиденциальности";?></a> - <?php echo "ознакомлен/ознакомлена!";?></span></label>
</div>
<div class="entry-content">
<?php if(has_post_thumbnail()){the_post_thumbnail();}?>
<?php the_content();?>
</div>
<?php endwhile;endif;?>
<?php
if(!empty($_GET['result'])){
// success
if($_GET['result']=='success') echo '<p class="success">Ваше сообщение было успешно отправлено</p>';
// error
if($_GET['result']=='error') echo '<p class="error">Ошибка: убедитесь в правильности введенных данных</p>';
}
// antispam, faked fields
?>
<div class="mail-form">
<form action="<?php echo get_template_directory_uri();?>/send.php" method="POST">
<div class="input-wrap">
<input type="text" name="name" placeholder="<?php echo "Имя";?>" required><p class="separator"></p><input type="text" name="email" placeholder="E-mail" required>
</div>
<input type="text" name="verify" id="verify">
<input type="hidden" name="source" value="<?php echo clear($_SERVER['REQUEST_URI']);?>">
<textarea name="message" cols="12" rows="3" placeholder="<?php echo "Сообщение";?>" required></textarea>
<button id="sendmessage" class="button" disabled>Отправить</button>
</form>
</div>
</main>
<?php get_footer();?>
<?php
function siteURL(){
$protocol=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off'||$_SERVER['SERVER_PORT']==443)?"https://":"http://";
$domainName=$_SERVER['HTTP_HOST'];
return $protocol.$domainName;
}
// check for spam
if(!empty($_POST['verify'])){
exit;
}
// подключаем модуль WP, чтобы вытащить e-mail администратора, и на него отправить сообщение, wp_mail(get_option('admin_email')
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
// check required fields
if(isset($_POST['name']) && isset($_POST['email']) && is_email($_POST['email']) && isset($_POST['message'])){
$headers=array("Content-type: text/html; charset=utf-8","From: ".$_POST['name']." <".$_POST['email'].">");
if(wp_mail(get_option('admin_email'),'Сообщение с сайта '.$_SERVER['HTTP_HOST'],wpautop($_POST['message']),$headers)){
header('Location: '.siteURL().$_POST['source']."?result=success");
exit;
}
}
header('Location: '.siteURL().$_POST['source']."?result=error");
exit;
?>
Посмотреть, как выглядит и работает форма обратной связи, можно в разделе контакты


