WordPressで作成したブログやサイトに自分で設置したメールフォームで、フォームを送信しようとすると何故か404エラーになったという経験はありませんか?
よくあるケース
この現象、多くの場合原因はフォーム項目のname属性に”name”という名前を使っていることです。
例えば、下記は一般的な問い合わせフォームの「お名前」入力欄です。
[html]
<th>お名前</th>
<td><input type=”text” name=”name” value=”” /></td>
[/html]
このフォームのsubmitボタンをクリックすると、おそらく404エラーになるでしょう。
この場合、name=”full_name” などのように、変数名を変えてあげれば問題なく動作するようになります。
原因
どうやらこの現象は、WordPressのフレームワークで予約されているパラメータ変数名を使ってしまったときに発生するようです。
具体的には、以下の箇所で定義されている $public_query_vars という配列がそれに該当すると思われます。
[wp-includes/class-wp.php ]
[php firstline=”18″]
var $public_query_vars = array(‘m’, ‘p’, ‘posts’, ‘w’, ‘cat’, ‘withcomments’, ‘withoutcomments’, ‘s’, ‘search’, ‘exact’, ‘sentence’, ‘debug’, ‘calendar’, ‘page’, ‘paged’, ‘more’, ‘tb’, ‘pb’, ‘author’, ‘order’, ‘orderby’, ‘year’, ‘monthnum’, ‘day’, ‘hour’, ‘minute’, ‘second’, ‘name’, ‘category_name’, ‘tag’, ‘feed’, ‘author_name’, ‘static’, ‘pagename’, ‘page_id’, ‘error’, ‘comments_popup’, ‘attachment’, ‘attachment_id’, ‘subpost’, ‘subpost_id’, ‘preview’, ‘robots’, ‘taxonomy’, ‘term’, ‘cpage’, ‘post_type’);
[/php]
いくつか実験してみましたが、name, postname, post_id などは独自フォームのパラメータに使うと上手く動作しませんでした。全部が全部NGなわけではないようですが、この配列で使われているものは使用しないようにするのが賢明です。
特に問い合わせフォームの「お名前」欄は、ほとんどの方が”name”という変数名を通例的に使っていると思いますので、WordPressを使う際には注意が必要ですね。