bbPressにてユーザープロフィールが404エラーになる問題の原因と対策

結論から言うとbbPress(2.5.8)と404 Redirection(1.8)には相性問題がある。一部のユーザープロフィールの表示に関しては両者を併用することはできない。詳細を以下に示す。

bbPress(WordPressで掲示板を実現するプラグイン)にて投稿者のユーザープロフィールを表示しようとすると404エラーが出現する問題に遭遇した。環境はWordPress 4.4.1 + bbPress 2.5.8 + Windows10 Pro(64bit)である。

より正確には現象としては、管理者のプロフィールは正しく表示されるのだが、その他のユーザーのプロフィールが表示されなかった。

原因についてhttps://bbpress.org/forums/topic/user-pages-and-error-404/のフォーラムが役立った。

I got the same problem. The problem only occurs when the user has not made any posts yet. WordPress throws in a 404 error since the loop fails for the user. This is a bbPress bug and should be fixed.

要するに、一度も記事を投稿したことのないユーザーに限ってそのユーザーのプロフィールを表示しようとするとエラーがでる、これはbbPressのバグだから修正が望まれる、と。

確認のため投稿をしたことのないユーザーでダミーの投稿をして見たところ、プロフィールが正常に表示された。しかし投稿を削除したとところ再び404エラーとなった。

以上まとめると、bbPressでユーザープロフィールが正常に表示されるためには、そのユーザーが投稿した記事が1件以上あることが必要条件のようである。

更に調査を進めるとhttps://bbpress.trac.wordpress.org/ticket/1478#comment:7にて開発者たちによってまさにこのバグが扱われていた。やはり投稿が一件もないユーザーにおいてHTTPのHeaderステータスに404がセットされてしまうのが原因のようであるが、この問題はfixされたとされている。2016/01/30現在、3年前に修正されたことになっている。しかし自分の環境では同じ問題が出現している。

404絡みが怪しいと思い、プラグイン「404 Redirection」(バージョン1.8)を無効化してみた。ビンゴ!無事にユーザープロフィールが表示されるようになった。上記フォーラムでもディスカッションされていたが、bbPressは他のプラグインと干渉しないように404ステータスを一度trueにしてfalseに戻すといった複雑な処理をしているようだ。falseに戻すのが本来正しいということなのだろうが、おそらくこの状態で404 Redirectionが処理を実行すると、当然ながらブログのトップページの飛ばされることになる。かなり深いバグでプラグインの本体に手をいれる必要がありそうなので残念ながらそれは断念して404 Redirectionを停止することにした。

なお、Apacheのhttpd.conにおけるErrorDocumentディレクティブは指定していても何の問題も生じないことも確認した。

ErrorDocument 404 404エラー時に表示するページのURL

 

コメント