なにがあったのか
wordpress で構築したサイト内で POST する必要があったので実装を進めていたところ、あるパラメーターを渡したときに 404 を吐くようになった。
結論
wordpress には予約語があり、それらの名前は GET や POST で使うと不具合の原因になる。
今回のケースでは 404 を吐くパラメーターで用いていたパラメーターの名前が予約語と衝突してしまっていた。(このとき衝突していたのは author
)
パラメーターの名前を変更して予約語との衝突を回避することで 404 は出なくなった。
もうちょっとくわしく
wordpress での開発は素人同然だったので色々ハマりながら試行錯誤していたが、原因がすぐに出てこなかったのが今回の件。
関数リファレンス/register taxonomy - WordPress Codex 日本語版 には以下のような記述がある。
以下の予約語を避けることが非常に重要です。特にタームを
$_GET
や$_POST
配列を使って引き渡す場合は注意してください。もし重複すると、WordPress は何のヒントも説明も無しに 404 エラーを返します。
何のヒントも無しに 404。まさに今回のケースである。無慈悲。
wordpress に慣れている人からすれば常識なのだろうけれど、予約語にはわたしが引っかかった author
の他にも year
や tag
といった汎用性が高い名前が並んでいるので、wordpress でサイト構築するときには常に注意する必要がある。めんどくさい
あと、wordpress には今回引っかかった author
の罠の他にも サイトのURL?author=1
で ID が漏洩する問題があったりするらしいので、わたしもこうして罠を踏み抜きながらワードプレス・サホウをマスターしなければならない。
ということで
wordpress の予約語には注意しましょうね。