Почему при отправке формы в WordPress загружается страница 404, хотя URL правильный

11 мар. 2011 г., 10:06:07
Просмотры: 31.7K
Голосов: 38

Я создаю простую контактную форму, но замечаю, что она, похоже, отправляется на недействительную страницу. URL в браузере правильный, но заголовок страницы показывает "Страница не найдена"

в верхней части страницы

$emailed = false;
if (isset($_POST['submit'])) {
    wp_mail('example@example.com', $_POST['subject'], $_POST['content']);
    $emailed = true;
}

ниже ... HTML:

<form action="<?php the_permalink(); ?>" method="post" id="contactform">
    <div class="formelem">
        <label for="name">Имя</label>
        <input type="text" name="name" class="required" />
    </div>
    <div class="formelem">
        <label for="email">Email</label>
        <input type="text" name="email" class="required email" />
    </div>
    <div class="formelem">
        <label for="subject">Тема</label>
        <input type="text" name="subject" class="required" />
    </div>
    <div class="formelem">
        <label for="content">Содержание</label>
        <textarea name="content" cols="30" rows="10" class="required"></textarea>
    </div>

    <input type="submit" value="Отправить сообщение" name="submit" value="submit" />
</form>
2
Комментарии

По какому URL находится ваша страница?

MikeSchinkel MikeSchinkel
11 мар. 2011 г. 11:18:14

Та же проблема возникает, если вы используете WooCommerce Subscriptions и у вас есть поле ввода с именем "subscriptions". Мне потребовалось довольно много времени, чтобы разобраться в чем дело, и я смог исправить это благодаря данному посту. Надеюсь, что кто-то, использующий WooCommerce Subscriptions и столкнувшийся с подобной проблемой, найдет это полезным!

Whiplash Whiplash
11 июн. 2019 г. 17:41:16
Все ответы на вопрос 5
7
84

Возможно, я ошибаюсь, но мне смутно помнится, что: name и email перехватываются WordPress для комментариев к записям. Если переименовать элементы формы в contact-name и contact-email, будет ли та же проблема?

11 мар. 2011 г. 13:09:08
Комментарии

Да, это поле имени, назови его через пространство имен, например jm_name :)

Backie Backie
11 мар. 2011 г. 15:16:13

Спасибо, Том! WP действительно перехватывал форму. Это странно.

Svetoslav Marinov Svetoslav Marinov
4 нояб. 2016 г. 23:30:43

Это также верно для AngularJS, если это поможет. ;)

Mark Mark
13 сент. 2018 г. 23:36:00

Я столкнулся с этой проблемой, и данный ответ направил меня на правильный путь. У меня не было поля с именем или email, но имя одного из input совпадало с именем пользовательского типа записи (CPT), что вызывало срабатывание wp query и ошибку 404. Я изменил имя поля, чтобы оно отличалось от CPT, и это решило проблему.

Muhammad Asad Muhammad Asad
28 мая 2019 г. 20:42:55

Ужасно, когда при использовании имени поля input email не удается вставить данные. Спасибо, помогло.

Arman H Arman H
9 июл. 2020 г. 06:32:17

Спасибо! У меня была такая же проблема при использовании имени s для свободного текстового поиска.

Punchlinern Punchlinern
11 янв. 2021 г. 15:27:06

Спасибо за это - спасло меня после часов отладки

tiadotdev tiadotdev
5 февр. 2022 г. 02:13:11
Показать остальные 2 комментариев
3

Проблема не только в атрибутах name или email, как писал Том. У меня возникла проблема даже с полем ввода, у которого атрибут name совпадал с одним из моих типов записей (Custom Post Types). Например:

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

И если где-то зарегистрирован CPT "movie", отправка формы приведёт к ошибке 404.

Вывод: Не используйте name, email и любые зарегистрированные идентификаторы пользовательских типов записей в качестве значений атрибута name в ваших формах.

5 нояб. 2014 г. 14:32:42
Комментарии

Что ж, я попытался ответить на оригинальный вопрос более точной информацией. Хм, возможно... :-) Добавил небольшую правку.

Marek Marek
18 нояб. 2014 г. 17:38:36

Также, имена пользовательских таксономий не разрешены в качестве имён для ввода

Marc Marc
26 мар. 2020 г. 15:30:32

Да, существует большой список. Вы можете найти помощь здесь: https://www.infinitypp.com/wordpress/easily-fix-wordpress-post-request-wont-return-return-404-form-submission/

MD. Shafayatul Haque MD. Shafayatul Haque
29 июл. 2020 г. 22:26:12
0

Попробуйте изменить name="email" на что-то вроде name="my_theme_email", сделайте то же самое со всеми полями. Похоже, что некоторые имена зарезервированы WordPress при отправке данных формы. У меня была такая же проблема, и я исправил её таким образом.

29 нояб. 2016 г. 10:26:04
0

У меня сработало, просто изменил ваши

имена типов input на любые имена, например names, emails, subjects, contents.

Это сработает. Спасибо.

20 дек. 2018 г. 17:22:13
2

Также вы не можете использовать год в качестве имени поля.

22 мая 2021 г. 12:06:01
Комментарии

Какое поле? Вы передаете поле года как параметр строки запроса или как поле в отправленной форме? Я был бы удивлен, если бы это была общая проблема.

Rup Rup
23 мая 2021 г. 03:06:09

Поле в отправленной форме.

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

Salman Patni Salman Patni
29 мая 2021 г. 12:16:51