Создание формы обратной связи на WordPress без плагина

Создание формы обратной связи на WordPress без плагина

Форма обратной связи для отправки сообщений администраторам присутствует практически на каждом сайте. Вордпресс предлагает массу решений с установкой плагинов, от самых маленьких как «WP Simple Mail Sender», до динозавров типа «Contact Form 7». Но если нужна простенькая и симпатичная форма отправки сообщений, зачем нужны мощные плагины?

Это несложная задача. Необходимо написать крохотный шаблон под page на WordPress и php обработчик для отправки сообщений. В файл шаблона в качестве комментария вносятся строки:

/*
Template name: Форма обратной связи
*/

Шаблон отображается в админке, выберите его из списка, и форма обратной связи готова.

Форма обратной формы - шаблон

Разместите в корневой директории Вашей темы два нижеприведенных файла, и все, форма обратной связи на Вашем сайте установлена, и не нужно ставить плагин.

скачать модуль contact.php

<?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();?>

скачать модуль send.php

<?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;
?>

Посмотреть, как выглядит и работает форма обратной связи, можно в разделе контакты

Опубликовано: 20:10-16.02.2021

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *