Отличный плагин WP Contact form 7 известен как многофункциональное решение для конструирования пользовательских форм в WordPress. К сожалению, единственная операция, которую выполняет плагин с данными — это отправка их по электронной почте.
В данной статье я покажу как реализовать одну из наиболее востребованных операций над отправляемыми данными — создание публикации на основе данных формы.
Для чего может понадобится сохранять отправляемые данные в виде публикации? На этот вопрос сложно ответить без контекста конкретного сайта.
Регистрация обращений (протоколирование).
Если через форму отправляются какие то обращения к руководству, заявки, претензии и т.п., то рано или поздно потребуется получить их полный список (журнал), а также быть уверенным, что ни одно из обращений не было утеряно при пересылке.
В случае с автоматической отправкой электронных писем этот процесс становится неконтролируемым, и часть заявок может быть потеряна из-за неполадок почтового сервера, изменения правил фильтрации писем, и т.д.
Второй частный случай — создание публикаций на основе данных, что присылают пользователи.
К примеру, вы получаете истории от пользователей, но желаете модерировать и проводить предварительную редактуру материалов. Можно получать данные по e-mail, потом копировать их из почты (если письмо дойдет) в поля соответствующей публикации, редактировать и публиковать.
Но гораздо лучше, если редактор сразу перейдет к своей непосредственной работе, особенно если форма содержит большое число полей.
Цепляемся за отправку почты WPCF7
WPCF7 действительно хороший плагин. Разработчики предоставили огромное число программных фильтров и зацепок в коде для кастомизации обработки данных.
Нас интересует возможность зацепиться за событие отправки письма, когда форма прошла все проверки.
1 2 3 4 5 6 7 8 9 10 |
/* цепляемся к отправке формы через плагин WPCF7 */ add_action( 'wpcf7_mail_sent', 'hookToProcessFormData', $priority = 10, $accepted_args = 1 ); function hookToProcessFormData($contant_form) { // передаваемый объект $contant_form позволит определить // та ли эта форма, которая требует обработки if ($contant_form->id() == [ID ВАШЕЙ ФОРМЫ]) { ... } } |
Айди форм можно подсмотреть в админке в генерируемых плагином шоткодах.
Теперь необходимо программно создать публикацию и заполнить в ней необходимые поля. Здесь возникают следующие типичные задачи, которые я рассмотрю в следующих статьях:
Доброго времени. Спасибо за материал! При отправке формы, передаются только поля типа текстовых, а чекбоксы и другие не передаются, не подскажете как исправить?
Чекбоксы и радиокнопки передаются в $_POST только если был установлен соответствующий флажок. Т.е. если поставили галку у /input type=checkbox value=yes name=flag /, то в $_POST будет значение $_POST[flag] == ‘yes’. Не поставили галку, переменной $_POST[flag] не будет в массиве.