Йо-йо! Вам никогда не нужно было создать простую форму в wordpress?! Или вам никогда не было интересно как работает Contact Form 7?!
Вот мне стало интересно и даже нужно, когда я делал свой плагин «Зооспас«. В нём я встроил форму, т.к. не хотел утяжелять сайты, которые будут на нём работать. И у меня это получилось. Сайт zoospas27.ru имеет время ответа сервера около 120-170мс.
Так как же работать с POST-запросами в WordPress?! Начну сразу с примера — форма.
<form class="form" method="POST" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>"> <input type="text" name="action" value="action_name"/> <!-- Другие инпуты --> <button type="submit">Отправить</button> </form>
esc_url( admin_url(‘admin-post.php’) ) — используем для печати адреса куда wp отправляет все POST-запросы.
С помощью инпута с name=»action» wp определит в какой action отправить данные.
Добавляем обработчики событий для admin_post_(название нашего action из первого input’а) и admin_post_nopriv_(….)
add_action( 'admin_post_action_name', 'custom_action_name' ); add_action( 'admin_post_nopriv_action_name', 'custom_action_name' );
И объявляем функцию, которая будет обрабатывать события, у нас это custom_action_name
function custom_action_name(){ // Получаем данные из массива $_POST $agrs = $_POST; // Код обработки функции }
На этом можно было закончить, но я вам покажу свой пример из плагина «Зооспас».
add_action( 'admin_post_zoospas_form', 'zoospas_form_action' ); add_action( 'admin_post_nopriv_zoospas_form', 'zoospas_form_action' ); function zoospas_form_action(){ // Получил данные $args = $_POST; // Вспомогательный класс для хранения переменных (тут я получаю email админа сайта) $to = ZoospasVars::$options['form']['email']; // Отчищаю email от лишнего на всякий случай $to = sanitize_email($to); // Получаю данные из формы $subject = $args['subject']; $email = $args['email']; $phone = $args['tel']; // Устанавливаю заголовки письма $headers = array( 'From: Zoospas <info@zoospas.ru>', 'content-type: text/html; charset=UTF-8', 'Cc: Zoospas <'. $to .'', 'Cc: '. $to ); // Собираю сообщение $message = ''; $message .= '<table>'; $message .= '<thead><tr><td>' . __('New appeal from the site') . '</td></tr></thead>'; $message .= '<tbody>'; $message .= '<tr><td>' . __('Email', 'zoospas') . '</td><td>' . $email . '</td></tr>'; $message .= '<tr><td>' . __('Phone number', 'zoospas') . '</td><td>' . $phone . '</td></tr>'; $message .= '</tbody></table>'; $responce = wp_mail( $to, $subject, $message, $headers ); // Получаю адрес страницы с которой произошёл запрос $addr = $_SERVER['HTTP_REFERER']; $addr = str_replace('?zs_mail_responce=true', '', $addr); $addr = str_replace('?zs_mail_responce=false', '', $addr); // Вспомогательная переменная. В $_GET будет установлена переменная в зависимости от успеха отправки email'а $concat = ''; if($responce == true){ $concat = '?zs_mail_responce=true'; header('Location: ' . $addr . $concat); exit; } else { $concat = '?zs_mail_responce=false'; header('Location: ' . $addr . $concat); exit; } }
Вот какая обработка формы у меня получилась. Надеюсь вам будет полезен этот пример.
Желаю вам удачи в ваших разработках. А если вам интересна судьба бездомных животных, помогите организации «Зооспас» или установите плагин zoospas на ваш сайт и начните помогать тем, кто в этом нуждается.
Не забудьте написать комментарий!)