Как обработать пользовательскую форму в WordPress для отправки на другую страницу?

13 нояб. 2018 г., 00:25:35
Просмотры: 18.3K
Голосов: 4

Я знаю, что в PHP я могу просто указать action равным random.php файлу и обработать данные там, но как в WordPress можно использовать уже существующую страницу с пользовательским шаблоном для отправки формы, чтобы после отправки формы на одной странице пользователь перенаправлялся на другую страницу в WordPress с сохранением всех введенных данных?

0
Все ответы на вопрос 1
6
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
<input type="hidden" name="action" value="your_action_name">

Добавьте эти элементы в вашу форму. Файл admin-post.php будет обрабатывать вашу форму. В этом случае, в зависимости от значения your_action_name, которое вы укажете, будет вызван соответствующий хук действия. Например, если вы добавите хук следующим образом в файл functions.php вашей темы или в ваш плагин:

add_action( 'admin_post_nopriv_your_action_name', 'your_function_to_process_form' );

тогда для неавторизованных пользователей

function your_function_to_process_form(){
// обрабатываем данные формы здесь
}

будет вызвана эта функция. В ней вы можете обработать данные вашей формы. Для авторизованных пользователей вам нужно переименовать ваш экшен в admin_post_your_action_name вместо admin_post_nopriv_your_action_name. Помните, что admin_post_ или admin_post_nopriv_ доступны в admin-post.php для вызова соответствующего действия через do_action. Все, что вы добавите в конце admin_post_nopriv_ или admin_post_, сформирует хук действия. Этот хук должен быть реализован с помощью add_action(). Если вы передадите contactform как скрытое действие, то ваш хук действия будет либо admin_post_nopriv_contactform, либо admin_post_contactform, либо оба.

13 нояб. 2018 г. 01:15:12
Комментарии

Вау, много шагов. Я понимаю все в вашем объяснении, кроме одного момента. Допустим, после отправки формы я хочу перенаправить пользователя на новую страницу с другим макетом - как это сделать? Потому что, как я говорил, в обычном PHP я указываю имя другого файла в action и просто пишу HTML-структуру в этом новом файле. Здесь вы говорите указать admin-post.php и задать хуки в functions.php. Но куда мне поместить URL новой страницы с новым HTML и стилями, на которую нужно перенаправить пользователя?

Limpuls Limpuls
13 нояб. 2018 г. 01:26:29

вы можете использовать wp_redirect( 'ваш URL' );. Поместите этот код в конце вашей функции после обработки формы.

user119247 user119247
13 нояб. 2018 г. 01:29:45

Внутри functions.php?

Limpuls Limpuls
13 нояб. 2018 г. 01:30:14

function your_function_to_process_form(){ //обработка формы, затем wp_redirect( 'ваша_страница' ); }

user119247 user119247
13 нояб. 2018 г. 01:31:42

Спасибо. Мне просто интересно, почему именно так должно быть сделано. Только отправка на admin-post.php. Интересно, почему именно на этот файл, а не на что-то другое. Это просто особенность WordPress и обработки пользовательских форм? Буду рад почитать любые материалы по этой теме, если у вас есть.

Limpuls Limpuls
13 нояб. 2018 г. 01:34:01

Если мы хотим продублировать форму в другом месте, тот же action нам поможет. WordPress поставляется с этим файлом, который предоставляет соответствующий хук для следования его событийной природе. Для получения дополнительной информации вы можете перейти по ссылке. Спасибо.

user119247 user119247
13 нояб. 2018 г. 01:40:30
Показать остальные 1 комментариев