Вопрос или проблема
У меня есть форма обратной связи на PHP, которую я использую на всех сайтах, поэтому в идеале я хочу избежать использования плагина. Используемые файлы включают:
• contact.php – Файл с написанным на PHP/HTML кодом, который отображает поля формы.
• contact-form.php – Файл, к которому подключается contact.php для отправки информации.
Я создал эквивалент contact.php в виде статической страницы в WordPress.
Код в contact.php, который подключается к contact-form.php, выглядит следующим образом:
<form method="post" action="/contact-form.php">
Что я хотел бы узнать, так это как мне подключиться к этому файлу в WordPress – нахождение файлов в WordPress всегда сбивало меня с толку…
Спасибо
Вы можете поместить как форму, так и логику обработки в один файл и отправить форму на ту же страницу, опустив атрибут action. Проверьте переменные $_POST, чтобы узнать, была ли отправлена форма, и выполните обработку, иначе отобразите форму.
if( isset( $_POST['somevar'] ) ) :
// обработка отправки
else :
// показать форму
endif;
Ответ или решение
Чтобы правильно интегрировать вашу контактную форму в WordPress, вы можете воспользоваться следующими шагами. Это позволит вам использовать свой код без необходимости установки плагинов, сохранив при этом функциональность формы.
Шаг 1: Создание страницы для формы
Создайте новую страницу в админке WordPress, где вы хотите разместить вашу контактную форму. Для этого перейдите в «Страницы» → «Добавить новую». Дайте странице название, например, «Контакт».
Шаг 2: Вставка кода формы
Используйте PHP-код для вставки формы на страницу. Вы можете сделать это двумя способами: создавая шаблон страницы или используя функцию add_shortcode()
в файле вашей темы.
Вариант 1: Создание шаблона страницы
-
В папке вашей темы создайте файл, например,
page-contact.php
. -
Начните с добавления заголовка шаблона в верхнюю часть этого файла:
<?php /* Template Name: Contact Template */ get_header(); ?> <div class="contact-form">
-
Вставьте HTML-код вашей формы:
<form method="post" action=""> <input type="text" name="name" required placeholder="Ваше имя"> <input type="email" name="email" required placeholder="Ваш email"> <textarea name="message" required placeholder="Ваше сообщение"></textarea> <button type="submit">Отправить</button> </form>
-
Добавьте обработку формы под формой:
<?php if (isset($_POST['name'])) { $name = sanitize_text_field($_POST['name']); $email = sanitize_email($_POST['email']); $message = sanitize_textarea_field($_POST['message']); // Здесь вы можете добавить код для отправки email, например: wp_mail('youremail@example.com', 'Новое сообщение от ' . $name, $message, 'From: ' . $email); echo '<p>Спасибо за ваше сообщение!</p>'; } ?> </div> <?php get_footer(); ?>
-
Сохраните файл.
Вариант 2: Использование шорткодов
Если вы не хотите создавать отдельный файл шаблона, вы можете использовать шорткоды:
-
В файле
functions.php
вашей темы добавьте следующее:function custom_contact_form() { ob_start(); ?> <form method="post" action=""> <input type="text" name="name" required placeholder="Ваше имя"> <input type="email" name="email" required placeholder="Ваш email"> <textarea name="message" required placeholder="Ваше сообщение"></textarea> <button type="submit">Отправить</button> </form> <?php if (isset($_POST['name'])) { $name = sanitize_text_field($_POST['name']); $email = sanitize_email($_POST['email']); $message = sanitize_textarea_field($_POST['message']); // Код для отправки email. wp_mail('youremail@example.com', 'Новое сообщение от ' . $name, $message, 'From: ' . $email); echo '<p>Спасибо за ваше сообщение!</p>'; } return ob_get_clean(); } add_shortcode('contact_form', 'custom_contact_form');
-
Теперь, когда вы создаете или редактируете страницу, просто вставьте
[contact_form]
в текстовый редактор, и форма будет отображаться на странице.
Заключение
Воспользовавшись одним из этих подходов, вы сможете интегрировать свою контактную форму в WordPress без использования плагинов. Убедитесь, что все пользовательские данные правильно очищаются и обрабатываются для повышения безопасности. Если у вас есть дополнительные вопросы, пожалуйста, не стесняйтесь задавать их.