Как отправить данные из HTML-формы?
Я создал пользовательский HTML калькулятор цен с формой, которая при отправке вызывает PHP-файл через атрибут action. Этот PHP-файл затем отправляет собранные данные на email нашей компании и дополнительное письмо клиенту, заполнившему форму.
Всё работает на другом сайте, который мы создали не на WordPress, но я не знаю, куда поместить этот PHP-файл, чтобы он работал в WordPress, так как я новичок в WordPress. Мне уже удалось разместить калькулятор внутри нашей темы, но сейчас я застрял. Мы сейчас используем BeTheme, но не обязательно будем придерживаться её, если это можно сделать проще без неё.
Буду благодарен за любую помощь.

Я согласен с другими ответами, что в большинстве случаев лучше использовать плагин для обработки отправки форм. Однако из этого правила есть исключения.
Если вы оказались в ситуации, когда вам нужно самостоятельно обрабатывать отправку форм, вы можете отправить данные в admin-post.php
. Вот как это можно настроить:
Сначала создайте вашу форму.
<!-- Отправляем форму в admin-post.php -->
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="POST">
<!-- Здесь размещаются поля вашей формы -->
<!-- Добавляем скрытое поле формы с именем "action" и уникальным значением, которое можно использовать для обработки отправки формы -->
<input type="hidden" name="action" value="my_simple_form">
</form>
Теперь настройте действие в вашем файле functions.php
. Вы будете использовать значение, которое указали в скрытом поле action формы.
function my_handle_form_submit() {
// Здесь вы будете управлять вашей формой после её отправки, у вас есть доступ к $_POST.
}
// Используйте значение из скрытого поля "action" при добавлении действий
add_action( 'admin_post_nopriv_my_simple_form', 'my_handle_form_submit' );
add_action( 'admin_post_my_simple_form', 'my_handle_form_submit' );
Вот ссылка на дополнительную информацию из кодекса - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)

Лучше поместить такого рода функциональность в плагин, а не втискивать её в тему. Пример простого плагина контактной формы для WordPress можно посмотреть здесь: https://www.sitepoint.com/build-your-own-wordpress-contact-form-plugin-in-5-minutes/
Советы:
- Выполняйте свой код в подходящий момент, найдите подходящий хук (например, хук init).
- используйте wp_mail() в WordPress, а не стандартную функцию mail() в PHP
Как упомянула выше @WebElaine: если вы создадите для этого плагин, то не потеряете функциональность при смене темы. Кроме того, функциональность будет легко переносить между сайтами, если это потребуется, и её можно будет включать/выключать одним кликом. Даже если функционал специфичен только для этого сайта, всё равно лучше не включать его в functions.php (дочерней темы). Только специфичная для темы функциональность (виджеты, подключение определённых CSS/JS файлов и т. д.) должна находиться там. Например, вы же не станете включать код Contact Form 7 в дочернюю тему.

Пожалуйста, объясните ваши причины, почему это 'лучше' — писать плагин

Есть более простой способ :)
Просто добавьте весь ваш код как 'Форма' + 'PHP часть' в любой .php файл вашей темы. ЛЮБОЙ! Затем создайте проверку "If else" по/с любым ПАРАМЕТРОМ, который вам нужен. Таким образом, форма будет отображаться только, если этот параметр будет в основном URL вашего браузера (текущей страницы).
Например:
у вас есть URL вида example.com/hello-world
(любой URL записи)
просто добавьте в "single.php" что-то вроде:
if ( $_GET['abcde'] == 'abc') {
... ваш код ...
}
и теперь загрузите страницу по следующему URL: example.com/hello-world?abcde=abc
Также сделайте действие вашей ФОРМЫ таким:
<form action=""> // без указания URL

Есть быстрый и грязный способ сделать что-то: если у вас в основном автономный WordPress и скрипт калькулятора цен + отправщик писем, учтите, что вы можете поместить произвольный PHP-файл в корневую директорию (или вообще куда угодно) в файловой структуре вашего сайта, и, если у вас нет специальных правил перезаписи и/или конфигурации сервера (скорее всего, их нет), то к нему можно будет получить доступ напрямую.
Например, если у вас есть скрипт test.php
, а ваш сайт на WordPress доступен по адресу https://example.com, и вы поместите test.php в корневую директорию сайта (там, где находятся файлы вроде wp-config.php
и папки типа wp-content/
), то вы и посетители вашего сайта смогут открыть test.php
в браузере по адресу: https://example.com/test.php. Другие формы, созданные либо WordPress, либо полностью независимо от него, могут отправлять данные методом POST на test.php
.
Для начинающих, более удобный WordPress-способ настройки функционала контактных форм — использование одного из множества плагинов для контактных форм. Популярный вариант — Contact Form 7: https://en-ca.wordpress.org/plugins/contact-form-7/. Есть десятки похожих решений.
Отличный коммерческий вариант для создания динамических форм с условными полями и т. д. — Gravity Forms: https://www.gravityforms.com/
Похоже, ваш скрипт делает две вещи: есть "калькулятор цен" и функция, которая "отправляет письмо вашей компании". Если вам нужно интегрировать калькулятор с вашей темой, попробуйте реализовать его напрямую в файлах шаблонов темы или, возможно, создать его как виджет: https://developer.wordpress.org/themes/functionality/widgets/. Если ваша тема определяет "области виджетов", вы легко сможете разместить ваш виджет в любом месте через wp-admin.
Надеюсь, это поможет! Удачи!
