2019/06/09
これまでコメントしてくれた方々にはご迷惑をおかけしました。wararyoです。
めでたいことに、1ヶ月ほど前からこのブログも徐々にコメントを貰うようになってきました。
しかし以下のような現象が起こります。
「このコメント、明らかに記事Aに対する言及のはずなのに記事Bに投稿されてるな…間違えたのかな…」
「この批判コメ、この記事に投稿されたにしてはやたら的はずれだな…」
気のせいかな…そう思いましたが、念の為自分で自分の記事にコメントしてみました。すると…
おわかりいただけただろうか…
そう、違う記事にコメントが入ったのです…
なぜ僕のブログでそのような怪奇現象が起こったのか、どのように対処したのか、述べていきます。
sponsored link
$postが原因か
軽く調べて見たところ、以下のような記事が見つかりました。
[WordPress] have_comments()がFALSEを返しコメントが表示されない現象 | きほんのき
$postというグローバル変数が書き換えられていると、どの記事のコメントを表示するか、どの記事にコメントするかまで変わってしまうようです。
コレが原因かと思い、コメント欄の直前に「現在の記事のタイトル」を示す$post->post_titleを出してみました。すると…
やっぱり!開いてる記事と違う〜!
しかも更新するたびに出力される記事タイトルが違う…
そのうちある法則を見つけました。
関連記事の一番後ろの記事と$post->post_titleが一緒!
なんでこんな事になった?
その後、ソースコードとにらめっこしているうちに原因が判明しました。
事の真相をまとめると以下です。
- 使ってるテーマでは関連記事を表示するためにthe_post()という関数を実行していた
- このthe_post()がグローバル変数$postを書き換えていた
- しかし、元々はコメント欄が関連記事の上にあった(つまり先に実行される)からそれでも問題なかった
- 僕がテーマをカスタマイズしまくる過程で、関連記事とコメントの順番を逆にした
- 関連記事で書き換えた$postが、コメント欄に影響を与えた
そう、元のテーマが悪いわけでもなく、プラグインが悪いわけでもなく、僕がテーマを魔改造しまくったのが悪かったんですね…
ブログのWordPressテーマについて | wararyo SoundWorks https://wararyo.com/2017/05/wptheme/
一行加えるだけで解決
解決策としては、$postを書き換える関数であるthe_post()を使わずに関連記事を表示できるようにするか、
関連記事を出力したあとで$postを元の値に戻してあげることが考えられます。
調べてみたところ、後者を実現する方法がありました。それも一行加えるだけで。
wp_reset_postdata()、これでグローバル変数$postを元の状態に戻せるんですね。
これで、無事に正しい記事にコメントされ、正しい記事のコメントが表示されるようになりました。
もしあなたが既存のテーマをカスタマイズしまくった結果同様の悩みを抱えているのなら、ぜひお試しください。
対策前にコメントしてくださった方へ
どの記事へのコメントかが特定できたものに関しては該当記事に移動、特定できなかったものに関しては残念ですが削除させていただきました。すみません…