2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

wordpress で構築したサイト内で POST しようとしたら予約語でハマった

Last updated at Posted at 2019-06-11

なにがあったのか

wordpress で構築したサイト内で POST する必要があったので実装を進めていたところ、あるパラメーターを渡したときに 404 を吐くようになった。

結論

wordpress には予約語があり、それらの名前は GET や POST で使うと不具合の原因になる。
今回のケースでは 404 を吐くパラメーターで用いていたパラメーターの名前が予約語と衝突してしまっていた。(このとき衝突していたのは author)
パラメーターの名前を変更して予約語との衝突を回避することで 404 は出なくなった。

もうちょっとくわしく

wordpress での開発は素人同然だったので色々ハマりながら試行錯誤していたが、原因がすぐに出てこなかったのが今回の件。

関数リファレンス/register taxonomy - WordPress Codex 日本語版 には以下のような記述がある。

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

何のヒントも無しに 404。まさに今回のケースである。無慈悲。
wordpress に慣れている人からすれば常識なのだろうけれど、予約語にはわたしが引っかかった author の他にも yeartag といった汎用性が高い名前が並んでいるので、wordpress でサイト構築するときには常に注意する必要がある。めんどくさい

あと、wordpress には今回引っかかった author の罠の他にも サイトのURL?author=1 で ID が漏洩する問題があったりするらしいので、わたしもこうして罠を踏み抜きながらワードプレス・サホウをマスターしなければならない。

ということで

wordpress の予約語には注意しましょうね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?