Вопрос или проблема
У меня есть одностраничный сайт со всем содержимым. Единственная другая страница — это страница “спасибо за отправку контактной формы”. На этой странице “thankssubmit.php” у меня есть PHP-код для отправки формы.
Я новичок в WordPress, так что, возможно, я делаю это совершенно неправильно, но я создал пользовательский шаблон страницы для этой страницы “thankssubmit.php”, используя /Имя шаблона: Thanks Submit/.
Затем я применил этот шаблон к совершенно новой странице в WP. Я не могу добавить .php к слагу, что, возможно, является единственной проблемой, но я не вижу способа обойти это. Странная проблема заключается в том, что когда я отправляю форму, я перехожу на правильный URL, но получаю ошибку “страница не найдена”. Если я скопирую и вставлю этот же самый URL, я попадаю на правильную страницу…
Ниже приведен код для всего.
Я посмотрел и не вижу, чтобы этот вопрос повторялся, но если это так, то толчок в правильном направлении будет очень признателен!
Форма
<form method="post" action="thankssubmit.php">
<h3>Напишите нам сообщение</h3>
<div class="row">
<div class="col-sm">
<div class="form-group">
<input id="nameInput" type="text" name="name" onkeyup="manage(this)" class="form-control" placeholder="Ваше имя *" />
</div>
<div class="form-group">
<input id="emailInput" type="text" name="email" onkeyup="manage(this)" class="form-control" placeholder="Ваш Email *" />
</div>
<div class="form-group">
<input type="text" name="phone" class="form-control" placeholder="Ваш номер телефона" />
</div>
<div class="form-group">
<input id="weddingDatePicker" type="date" name="date" class="form-control" placeholder="Дата вашей свадьбы -" />
</div>
<div class="form-group">
<input type="text" name="hear" class="form-control" placeholder="Как вы узнали о нас?" />
</div>
</div>
<div class="col">
<div class="form-group">
<textarea id="messageInput" name="message" onkeyup="manage(this)" class="form-control" placeholder="Ваше сообщение *" style="width: 100%; height: 254px;"></textarea>
</div>
<div class="form-group">
<input id="contactSubmitBtn" type="submit" disabled name="btnSubmit" class="btn" value="Отправить сообщение" />
</div>
</div>
</div>
</form>
Страница thankssubmit.php
<?php get_header(); ?>
<!-- СООБЩЕНИЕ О СПАСИБО ИЛИ УСПЕШНОЙ ОТПРАВКЕ ПОСЛЕ ОТПРАВКИ EMAIL -->
<section id="thanksMsgPG">
<h1 class="thanksmsg">Спасибо, что связались с нами.</h1>
<h3 class="thanksmsg">Мы ответим вам как можно скорее!</h3>
<a href="/"><button class="btn ">Назад</button></a>
</section>
<?php get_footer(); ?>
<?php
/*
Template Name: Thanks Submit
*/
if (isset($_POST['btnSubmit'])) {
// EMAIL И ТЕМА ОТПРАВЛЯЕМОГО EMAIL
$email_to = "[email protected]";
$subject = "Форма отправки контакта";
//ОШИБКИ, ЕСЛИ ВЫЗВАНА ФУНКЦИЯ DIED (ПОЛУЧАСТИЧНО УСТАРЕЛО, ТАК КАК КНОПКА ОТПРАВКИ НЕ БУДЕТ ДОСТУПНА, ПОКА ПОЛЯ НЕ БУДУТ ЗАПОЛНЕНЫ ВЕРНО)
function died($error)
{
echo "Извините, но возникли ошибка(и) с формой, которую вы отправили. ";
echo "Эти ошибки указаны ниже.<br /><br />";
echo $error . "<br /><br />";
echo "Пожалуйста, вернитесь и исправьте эти ошибки.<br /><br />";
die();
}
// ЕСЛИ НИЧЕГО НЕ ВВЕДЕНО, ВЫДАЕТСЯ СООБЩЕНИЕ ОБ ОШИБКЕ
if (!isset($_POST['name']) ||
!isset($_POST['email']) ||
!isset($_POST['message'])) {
died('Извините, но, похоже, возникла проблема с формой, которую вы отправили.');
}
//ПОЛУЧЕНИЕ ИМЕНИ, EMAIL, ТЕЛЕФОНА И СООБЩЕНИЯ ИЗ ФОРМЫ И ПЕРЕМЕЩЕНИЕ ИХ В ПЕРЕМЕННЫЕ
$full_name = $_POST['name']; // требуется
$email_from = $_POST['email']; // требуется
$phone = $_POST['phone'];
$date = $_POST['date'];
$hear = $_POST['hear']; // требуется
$message = $_POST['message']; // требуется
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
//ПРОВЕРКА, ЧТОБЫ УБЕДИТЬСЯ, ЧТО ВВЕДЕН ВЕРНЫЙ EMAIL
if (!preg_match($email_exp, $email_from)) {
$error_message .= 'Введенный вами email невалиден.<br />';
}
//ПРОВЕРКА, ЧТОБЫ УБЕДИТЬСЯ, ЧТО ВВЕДЕНО ВЕРНОЕ ИМЯ
$string_exp = "/^[A-Za-z .'-]+$/";
if (!preg_match($string_exp, $full_name)) {
$error_message .= 'Введенное вами имя невалидно.<br />';
}
//ПРОВЕРКА, ЧТОБЫ УБЕДИТЬСЯ, ЧТО СООБЩЕНИЕ БОЛЕЕ 2 СИМВОЛОВ
if (strlen($message) < 2) {
$error_message .= 'Введенное вами сообщение невалидно.<br />';
}
if (strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Детали формы ниже.\n\n";
//УБЕДИТЬСЯ, ЧТО НЕТ ВСТАВОК ЗАГОЛОВКОВ
function clean_string($string)
{
$bad = array("content-type", "bcc:", "to:", "cc:", "href");
return str_replace($bad, "", $string);
}
//ФОРМАТ ОТПРАВЛЯЕМОГО EMAIL. ОЧИСТКА СТРОКИ ОЧИЩЕНИЯ ЛЮБЫХ ПРОБЕЛОВ
$email_message .= "Имя: " . clean_string($full_name) . "\n";
$email_message .= "Email: " . clean_string($email_from) . "\n";
$email_message .= "Телефон: " . clean_string($phone) . "\n";
$email_message .= "Дата свадьбы: " . clean_string($date) . "\n";
$email_message .= "Я узнал о вас через: " . clean_string($hear) . "\n";
$email_message .= "Сообщение: \r\n" . clean_string($message) . "\n";
$email_from = $full_name . '<' . $email_from . '>';
// СОЗДАНИЕ ЗАГОЛОВКА EMAIL ДЛЯ РАСПОЗНАВАНИЯ GMAIL
$headers="From: " . $email_from . "\r\n" .
'Reply-To: ' . $email_from . "\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $subject, $email_message, $headers);
// echo $email_message;
?>
<?php
}
?>
Первая картинка ниже показывает ошибку URL после отправки формы, а вторая показывает после перезагрузки URL страницы.
Почему бы не использовать плагины WordPress?
Попробуйте следующие плагины:
- Gravity Forms
- Contact Form 7 и Thank You страница для Contact Form 7
Надеюсь, я помог
Спасибо за ваш комментарий
вам нужно изменить часть вашего кода
Способ не совсем правильный, но работает
в каталоге wp-content/themes/ваша-тема
создайте php-файл и задайте название page-thanks.php
И поместите ваш код в этот файл
Для простоты:
<?php
/**
* Template Name: Thank You Page
*
*/
get_header();
ВАШ КОД
get_footer();
?>
Теперь создайте страницу и установите шаблон страницы Thank You Page
Теперь вы можете увидеть страницу, которую вы создали
.
Ответ или решение
Проблема, с которой вы столкнулись, связана с перенаправлением на страницу "thankssubmit.php" после отправки формы. Давайте разберемся в причинах и предложим шаги по устранению проблемы.
Причины проблемы
-
Отсутствие поддержки суффикса
.php
в WordPress URL: WordPress по умолчанию не поддерживает .php в адресах URL страниц. Это может привести к ошибке "страница не найдена", если вы пытаетесь напрямую обратиться к файлу.php
. -
Подход к созданию шаблона страницы в WordPress: Вы использовали шаблон страницы для создания функциональности отправки формы, что может не работать должным образом без правильной настройки.
-
Несоответствие между действием формы и URL WordPress: Ваша форма направляется на
thankssubmit.php
, который, вероятно, является файлом на сервере, а не страницей WordPress.
Решение
Создайте подходящий шаблон страницы
-
Создание файла шаблона: В каталоге вашей темы (
wp-content/themes/your-theme
) создайте файлpage-thanks.php
. -
Код в шаблоне:
<?php /** * Template Name: Спасибо */ get_header(); ?> <!-- Благодарственное сообщение --> <section id="thanksMsgPG"> <h1 class="thanksmsg">Спасибо за ваше обращение.</h1> <h3 class="thanksmsg">Мы свяжемся с вами в ближайшее время!</h3> <a href="/"><button class="btn ">Назад</button></a> </section> <?php if (isset($_POST['btnSubmit'])) { $email_to = 'ваш_адрес_электронной_почты@example.com'; $subject = 'Форма обратной связи'; // Обработка данных формы и отправка письма $email_message = "Детали формы: \n\n"; //... mail($email_to, $subject, $email_message, $headers); } get_footer(); ?>
-
Создание страницы в админ-панели: Создайте новую страницу в WordPress и выберите созданный шаблон "Спасибо". Присвойте странице чистый URL без суффикса
.php
.
Обновление формы
Теперь вам нужно изменить действие формы для соответствия адресу страницы в WordPress:
<form method="post" action="<?php echo site_url('/thanks'); ?>">
<!-- Все остальные поля формы остаются без изменений -->
</form>
Рекомендации
-
Используйте плагины: Рассмотрите возможность использования плагинов WordPress для форм, таких как Gravity Forms или Contact Form 7. Они значительно упрощают работу с формами и перенаправлениями без необходимости в ручной настройке PHP-кода.
-
SEO оптимизация: Если вы занимаетесь продвижением сайта, убедитесь, что страницы оптимизированы под ключевые запросы. Подключите инструменты аналитики, чтобы анализировать поведение пользователей на сайте.
Придерживайтесь этих шагов, и ваша форма будет корректно обрабатывать отправку данных без ошибок и необходимости в обновлении страницы.