Как отправить данные из HTML-формы?

7 авг. 2018 г., 18:19:53
Просмотры: 31.5K
Голосов: 5

Я создал пользовательский HTML калькулятор цен с формой, которая при отправке вызывает PHP-файл через атрибут action. Этот PHP-файл затем отправляет собранные данные на email нашей компании и дополнительное письмо клиенту, заполнившему форму.

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

Буду благодарен за любую помощь.

1
Комментарии

Функциональность действительно должна быть вынесена в плагин, а не в тему. Если вы когда-нибудь решите сменить тему, вы же не хотите потерять свою форму/калькулятор. Поэтому рассмотрите возможность создания собственных плагинов - или, учитывая что существует множество готовых плагинов для форм в WordPress, просто воспользуйтесь одним из них. Это, вероятно, лучший вариант, потому что они будут регулярно обновляться для обеспечения безопасности и совместимости с WordPress. Если вам действительно нужен собственный HTML/CSS для формы, преобразуйте её в пользовательский плагин.

WebElaine WebElaine
7 авг. 2018 г. 18:46:12
Все ответы на вопрос 4
0

Я согласен с другими ответами, что в большинстве случаев лучше использовать плагин для обработки отправки форм. Однако из этого правила есть исключения.

Если вы оказались в ситуации, когда вам нужно самостоятельно обрабатывать отправку форм, вы можете отправить данные в 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)

7 авг. 2018 г. 19:37:51
2

Лучше поместить такого рода функциональность в плагин, а не втискивать её в тему. Пример простого плагина контактной формы для 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 в дочернюю тему.

7 авг. 2018 г. 18:47:00
Комментарии

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

Lee Goddard Lee Goddard
2 июн. 2020 г. 15:44:24

Возможно, вам стоит добавить это в ваш ответ, а не в комментарий! Ответы наиболее полезны, когда они содержат объяснение своей логики и ссылки на документацию.

Lee Goddard Lee Goddard
15 июн. 2020 г. 14:46:19
0

Есть более простой способ :)

Просто добавьте весь ваш код как 'Форма' + '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  
21 апр. 2019 г. 20:06:39
0

Есть быстрый и грязный способ сделать что-то: если у вас в основном автономный 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.

Надеюсь, это поможет! Удачи!

7 авг. 2018 г. 18:57:39