WordPressでformの値をsubumitすると404エラーが発生する現象に遭遇
WordPressにて、以下のようなありふれたformからsubmitすると、404ページへと飛ばされてしまう。しかも、yearのセレクトボックスを変更した時にのみ、その現象が発生する。その解決策をbivoroする。
<form method="post">
<select name="year">
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
<option value="2021">2021</option>
</select>
<select name="month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<button type='submit' name='act' value='send'>送信</button>
</form>
原因は、selectのname属性にWordPressの予約語「year」を使用していること。
codexによれば…
以下の予約語を避けることが非常に重要です。特にタームを $_GET や $_POST 配列を使って引き渡す場合は注意してください。もし重複すると、WordPress は何のヒントも説明も無しに 404 エラーを返します。
エラーメッセージに詳細が記述されないので、原因をパーマリンクなど他の箇所に求めがち。しかも「year」「day」「minute」「second」は予約語であるのに「month」【月名】= たとえば「April」はそうではないのがややこしい。(「monthnum」【月番号】= たとえば「4」は予約語になっている。)
予約語一覧
- 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