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

23

Я просто создаю простую контактную форму, но замечаю, что она, похоже, публикуется на неверной странице. 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">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">Subject</label>
        <input type="text" name="subject" class="required" />
    </div>
    <div class="formelem">
        <label for="content">Content</label>
        <textarea name="content" cols="30" rows="10" class="required"></textarea>
    </div>

    <input type="submit" value="Submit Message" name="submit" value="submit" />
</form>
JM на работе
источник
2
Какой URL находится на вашей странице?
MikeSchinkel
Та же проблема возникает, если вы используете подписки WooCommerce и у вас есть поле ввода с именем «подписки». Мне потребовалось довольно много времени, чтобы понять, что происходит, и мне удалось исправить это благодаря этому посту. Я надеюсь, что кто-то, использующий подписки WooCommerce и имеющий подобную проблему, найдет это полезным!
Whiplash

Ответы:

49

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

Том
источник
1
Да, это поле имени, пространство имен вместо jm_name :)
Backie
Спасибо, Том! WP действительно угнал форму. Это странно.
Святослав Маринов
Это также верно для AngularJS, в случае, если это помогает. ;)
Марк
Я столкнулся с этой проблемой, этот ответ направил меня на правильный путь. У меня не было поля с именем или адресом электронной почты, но одно из входных имен было равно настраиваемому типу записи (cpt), поэтому оно вызывало запрос wp и 404. Поэтому я изменил имя поля, чтобы оно отличалось от cpt, и он исправил вопрос.
Мохсин
4

Это не только name или emailпроблема, как писал Том. У меня была проблема даже с полем ввода с атрибутом имени, таким же, как один из моих пользовательских типов постов. Например:

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

А когда вы зарегистрировали CPT-фильм, где-нибудь еще, отправка вашей формы закончится с ошибкой 404.

Вывод: не используйте name, emailа в any registered custom post type handleкачестве входного значения атрибута name в ваших формах.

Marek
источник
Ну, я попытался ответить на оригинальный вопрос с более точной информацией. Эмм, наверное ... :-) Добавим немного правки.
Марек
1

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

Тьерри Эду
источник
0

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

input type name, email, subject, and content to any name as names, emails, subjects, contents.

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

Y. Joy Ch. Сингха
источник