WordPress

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。 WordPress

こんにちは!

川口でWEB屋さんをやっていますTEDASKのSeitoです。

今回は、WordPressでお問合せフォームを作る際に、プラグインではなく決済も含めたフォームなど自作でフォームを作る場合もあるかと思いますが、その際に注意しなければいけない点についてお伝えしたいと思います。

 

nameなどのWordPressの予約語を送信してはいけない

まず結論を先に書くとWordPressには予約語というWordPressで機能的に使われているパラメータがあります。

その一つにnameがあります。フォームではお名前のところにname=”name”などよく使う例もあると思いますが、このnameをformから送信すると、404エラーが返ってきてしまいます。

この予約語については、公式サイトのCodexに掲載されておりますので、formで使っているパラメータ名が予約語と被っていないか必ず確認するようにしましょう。

以下の予約語を避けることが非常に重要です。特にタームを $_GET や $_POST 配列を使って引き渡す場合は注意してください。もし重複すると、WordPress は何のヒントも説明も無しに 404 エラーを返します。

  • attachment
  • attachment_id
  • author
  • author_name
  • calendar
  • cat
  • category
  • category__and
  • category__in
  • category__not_in
  • category_name
  • comments_per_page
  • comments_popup
  • customize_messenger_channel
  • customized
  • cpage
  • day
  • debug
  • error
  • exact
  • feed
  • fields
  • hour
  • link_category
  • m
  • minute
  • monthnum
  • more
  • name
  • nav_menu
  • nonce
  • nopaging
  • offset
  • order
  • orderby
  • p
  • page
  • page_id
  • paged
  • pagename
  • pb
  • perm
  • post
  • post__in
  • post__not_in
  • post_format
  • post_mime_type
  • post_status
  • post_tag
  • post_type
  • posts
  • posts_per_archive_page
  • posts_per_page
  • preview
  • robots
  • s
  • search
  • second
  • sentence
  • showposts
  • static
  • subpost
  • subpost_id
  • tag
  • tag__and
  • tag__in
  • tag__not_in
  • tag_id
  • tag_slug__and
  • tag_slug__in
  • taxonomy
  • tb
  • term
  • theme
  • type
  • w
  • withcomments
  • withoutcomments
  • year

参照:Codex関数リファレンス/register taxonomy

 

どのようになるか実験

今回の実験用のページ構成は

  • お問い合わせページ(/form-test)
  • お問い合わせ確認ページ(/confirm)

この2ページです。エラーの確認なので送信まではやりません。

フォームはPHPを使って作りますので、今回はpage-form-test.phpというテンプレートを作って、フォームを作りました。

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。

<form method="POST" action="<?php echo home_url().'/confirm'; ?>">
    <label>お名前</label>
    <input type="text" name="name">
    <label>メールアドレス</label>
    <input type="email" name="email">
    <label>お問い合わせ内容</label>
    <textarea name="body"></textarea>
    <button style="margin-top:2rem;" type="submit">確認</button>
</form>

 

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。  確認ページはこんな感じです。

 

本来は、フォームからデータを受け取らない限りは、確認ページは見られてはいけなくて、お問い合わせのページにリダイレクトで戻す必要があるのですが、今回は説明上、見られるようにしています。

URLも/confirmというURLでページが表示されているのを覚えておいてください。

では、この状態で、フォームから送信してみます。

 

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。

といった感じで、先程は/confirmのページに直接アクセスするとページが見れていたのに、送信した途端「ページが見つかりません」のページになりました。

このように、nameの予約語を送信したため、エラーが起こっています。

 

<form method="POST" action="<?php echo home_url().'/confirm'; ?>">
    <label>お名前</label>
    <input type="text" name="s_name">
    <label>メールアドレス</label>
    <input type="s_email" name="email">
    <label>お問い合わせ内容</label>
    <textarea name="s_body"></textarea>
    <button style="margin-top:2rem;" type="submit">確認</button>
</form>

先程のコードのプロパティ名を全てs_を付けてnameという名前を避けて送信してみます。

 

WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。

すると、無事フォームの確認ページが表示されました。

※このformのコードについてはあくまでエラーの実験をするためのもので、CSRF対策などは一切行っておりませんので、実際にフォームを自作する際は、適宜クロスサイト・スクリプティング対策やCSRF対策を行うようにして下さい。

 

まとめ

今回は、WordPressの予約語について説明しました。

お問い合わせフォームを自作することは少ないかと思いますが、WordPressを駆使してECや予約サイトなどを作ると検索するためのフォームが必要になりますが、その時にもこの予約語でハマってしまうことがあります。

WordPressでページが存在するのに404エラーが出たときはこの予約語の問題の可能性が高いので、開発の際は気を付けてくださいね。

以上、「WordPressで自作フォームでデータを送信すると404やindex.phpが表示される理由。name=”name”は使ってはいけません。」でした!

この記事を書いた人
Toshi Seito

TEDASK代表
WordPressに関する相談実績のべ300件以上、タイムチケットでのWordPressの立ち上げお手伝いのチケット販実績240件以上!WordPressのカスタマイズから、WEBサービス制作、ホームページ制作のご相談はお任せ下さい。

Toshi Seitoをフォローする

コメント

タイトルとURLをコピーしました