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

Вопрос или проблема

У меня есть одностраничный сайт со всем содержимым. Единственная другая страница — это страница “спасибо за отправку контактной формы”. На этой странице “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 страницы.После нажатия кнопки отправки на предыдущей странице

После перезагрузки URL

Почему бы не использовать плагины WordPress?
Попробуйте следующие плагины:

  1. Gravity Forms
  2. 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" после отправки формы. Давайте разберемся в причинах и предложим шаги по устранению проблемы.

Причины проблемы

  1. Отсутствие поддержки суффикса .php в WordPress URL: WordPress по умолчанию не поддерживает .php в адресах URL страниц. Это может привести к ошибке "страница не найдена", если вы пытаетесь напрямую обратиться к файлу .php.

  2. Подход к созданию шаблона страницы в WordPress: Вы использовали шаблон страницы для создания функциональности отправки формы, что может не работать должным образом без правильной настройки.

  3. Несоответствие между действием формы и URL WordPress: Ваша форма направляется на thankssubmit.php, который, вероятно, является файлом на сервере, а не страницей WordPress.

Решение

Создайте подходящий шаблон страницы

  1. Создание файла шаблона: В каталоге вашей темы (wp-content/themes/your-theme) создайте файл page-thanks.php.

  2. Код в шаблоне:

    <?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();
    ?>
  3. Создание страницы в админ-панели: Создайте новую страницу в WordPress и выберите созданный шаблон "Спасибо". Присвойте странице чистый URL без суффикса .php.

Обновление формы

Теперь вам нужно изменить действие формы для соответствия адресу страницы в WordPress:

<form method="post" action="<?php echo site_url('/thanks'); ?>">
    <!-- Все остальные поля формы остаются без изменений -->
</form>

Рекомендации

  1. Используйте плагины: Рассмотрите возможность использования плагинов WordPress для форм, таких как Gravity Forms или Contact Form 7. Они значительно упрощают работу с формами и перенаправлениями без необходимости в ручной настройке PHP-кода.

  2. SEO оптимизация: Если вы занимаетесь продвижением сайта, убедитесь, что страницы оптимизированы под ключевые запросы. Подключите инструменты аналитики, чтобы анализировать поведение пользователей на сайте.

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

Оцените материал
Добавить комментарий

Капча загружается...