Как лучше сделать обработку формы и пренаправление на разные страницы?
На сайте WordPress есть форма . В зависимости от нажатой кнопки в этой форме происходит пере направление на нужную страницу.
Как лучше сделать?
1)Обработка формы на этой странице и в зависимости от результата - пере направление на нужную страницу.
2)На нужную страницу делать пост запрос и там обрабатывать. Тогда на каждую страницу нужно повесить обработчик формы.
Целевые страницы (на которые делается пере направление) все разные : где то данные используются в другой форме, где то данные (вносятся) читаются сразу бд.
Пожалуйста обоснуйте ваш ответ (выбор) - хочется по лучше в этом разобраться.
Дополнительно:
Целевые страницы (на которые делается пере направление) все разные : где то данные используются в другой форме, где то данные (вносятся) читаются сразу бд.
Ниче не понятно...
На целевой странице используются данные из отправленной формы по разному.
<form method="post"> <button type="submit" form-action="/page1.php">1</button> <button type="submit" form-action="/page2.php">2</button> </form> |
<form method="post"> <button type="submit" form-action="/page1.php">1</button> <button type="submit" form-action="/page2.php">2</button> </form>
- Спасибо за пример, но интересует выбор самой логики (места) обработки и пере направления
- Natasha000, Я бы на одной странице все делал, а потом отправлял куда нужно. Но это вне контекста вордпресс. Возможно в WP удобнее сразу отправлять на отдельный обработчик.
- Natasha000,
интересует выбор самой логики (места) обработки
А что, кроме "В зависимости от нажатой кнопки в этой форме происходит пере направление на нужную страницу." предполагается еще какая-то логика?
- YBB, тут вопрос в том, что выбрать:
1) обработать форму на текущей и перенаправить
2) перенаправить и там уже обрабатывать - Natasha000, так всё зависит от того, что и как обрабатывается, как далее используется и используется ли. Для задачи "В зависимости от нажатой кнопки" лучший вариант предложил Сергей - обработка логики выбора средствами самой формы.
1)Обработка формы на этой странице Обосновую. Для чего была создана форма? Для каких-то целей. Зачем делать ненужное перенаправление если есть форма для выполнения этого действия. Зачем засорять сайт лишним кодом? Чтоб медленее грузился? Тогда если есть такое желание делайте перенаправление.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Лучше обрабатывать форму в одном месте, а потом делать редирект на нужную страницу. Не нужно вешать отдельный обработчик на каждую целевую страницу: так логика быстро расползётся, появятся дубли, разные проверки безопасности и ошибки в поддержке.
Правильная схема:
wp_safe_redirect()на целевую страницу.Пример для WordPress через
admin_post:<form method="post" action="/wp-admin/admin-post.php"> <input type="hidden" name="action" value="my_form_action"> <input type="hidden" name="_wpnonce" value="..."> <button name="target" value="calc">Калькулятор</button> <button name="target" value="order">Заявка</button> </form>
add_action('admin_post_nopriv_my_form_action', 'handle_my_form'); add_action('admin_post_my_form_action', 'handle_my_form'); function handle_my_form() { check_admin_referer('my_form_action'); $target = sanitize_key($_POST['target'] ?? ''); if ($target === 'calc') { wp_safe_redirect(home_url('/calculator/')); exit; } if ($target === 'order') { wp_safe_redirect(home_url('/order/')); exit; } wp_safe_redirect(home_url('/')); exit; }
Если на целевой странице нужны данные формы, не передавайте чувствительные данные в URL. Для простых значений можно использовать GET-параметры, для заявок — сохранять в БД или transient по ключу. Для авторизованных пользователей удобно user meta.
Обработка на целевых страницах допустима только для очень простых сценариев, но в долгосрочной поддержке это хуже. Центральный обработчик проще тестировать, защищать и менять. Целевая страница должна отображать результат, а не решать бизнес-логику формы.