Кастомная форма, шорткод и обработчик отправки - решение проблемы 404

27 апр. 2011 г., 23:19:43
Просмотры: 5.94K
Голосов: 4

У меня есть фронтенд-форма с несколькими полями ввода. Требования вынуждают меня использовать кастомный шорткод для создания формы. Я уже протестировал страницу с этим шорткодом.

Вот мой код:

<form name="myform" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" enctype="multipart/form-data">

Исходя из этого, форма должна открывать ту же страницу (и это работало). Однако при отправке формы я получаю 404 ошибку на этом же URL. Есть ли решение?

ОБНОВЛЕНИЕ #1

Пробую другой подход, используя add_action('init'):

add_action('init', 'mbro1_intercept_form_input');
function mbro1_intercept_form_input()
{
    if( !(isset($_POST['action_code']) && $_POST['action_code'] == 'mbro_intercept_form_input') )
        return "";
    if( isset( $_POST['submit'] ) )
    {
        //выполняю мой код здесь
        wp_redirect( get_permalink(35) ); //страница с [шорткодом]
    }
}

Этот код успешно выполняет нужные действия при отправке. Но! После редиректа все равно получаю 404. Не понимаю, в чем проблема.

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

Какой у тебя код формы?

Bainternet Bainternet
28 апр. 2011 г. 09:14:09

@bainternet вот здесь: http://pastebin.com/fXvyuwnx

ariefbayu ariefbayu
28 апр. 2011 г. 09:22:52
Все ответы на вопрос 3
1

Есть ли в вашей форме поле ввода с именем "name"? Например:

<input type="text" name="name">

Если да, это может вызвать проблемы. Измените значение атрибута name.

Смотрите также: Поле 'name' в форме вызывает ошибку и переход на страницу 404.

28 апр. 2011 г. 06:05:42
Комментарии

У меня нет поля 'name' в моей форме.

ariefbayu ariefbayu
28 апр. 2011 г. 06:40:03
4

Я предполагаю, что строка ближе к концу

wp_redirect( get_permalink(35) );//страница с формой

является тем, что не работает. Я бы изменил её на это

$redirect_link =  get_permalink(35) ; //страница с формой
wp_redirect( $redirect_link );  // инициировать перенаправление
exit;

это должно заставить функцию работать правильно

1 мая 2011 г. 17:36:28
Комментарии

это тоже не работает T_T

ariefbayu ariefbayu
1 мая 2011 г. 22:19:55

Какой именно ссылке выдает 404? То есть, какой URL страницы, на которую он пытается перенаправить и из-за этого получает 404?

Norcross Norcross
2 мая 2011 г. 00:29:48

это исходит из example.com/?page_id=35 и при отправке переходит на example.com/?page_id=35. После обработки он должен перенаправлять на example.com/?page_id=35, чтобы при обновлении страницы пользователем это не влияло на сайт.

ariefbayu ariefbayu
2 мая 2011 г. 01:13:35

ой, не туда кликнул. Ну что ж, сегодня твой счастливый день — получай +50 репутации ;))

ariefbayu ariefbayu
2 мая 2011 г. 04:18:10
2

Я использую die() в качестве решения. Хотя мне это не особо нравится.

$redirect_link =  get_permalink(35); //страница с формой
$script_redirect = "<div>Ваша форма отправлена. Пожалуйста, подождите. Если браузер не перенаправил вас автоматически, нажмите <a href='$redirect_link'>здесь</a>.</div>
<script type='text/javascript' language='javascript'> 
    window.location = '$redirect_link';
</script> ";
die( $script_redirect );
1 мая 2011 г. 22:52:34
Комментарии

Сработает ли, если добавить die() после вызова wp_redirect()? Простой вызов редиректа не останавливает выполнение скрипта. Этот паттерн можно увидеть и в ядре WordPress: wp_redirect( $somewhere ); exit;.

Jan Fabry Jan Fabry
4 мая 2011 г. 15:27:33

Каким-то образом это заработало. Я пробовал wp_redirect(); exit; Странно, правда?

ariefbayu ariefbayu
4 мая 2011 г. 22:53:00