Форма обратной связи для отправки сообщений администраторам присутствует практически на каждом сайте. Вордпресс предлагает массу решений с установкой плагинов, от самых маленьких как «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; ?>
Посмотреть, как выглядит и работает форма обратной связи, можно в разделе контакты