ワードプレス、カスタムフィールドのキャッシュについて

製作

最終更新日:2020/10/15

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

ワードプレスは何度も何度もSQLクエリ発行してデータベースアクセスを何度もしないで済むように内部的に自動でキャッシュしてくれてます。

ただそうはいってもどれくらいキャッシュしてくれてるのか不安なこともありますよね。ぼくは「とかいってホントはキャッシュしてないんじゃないの?」と疑ってたりしました。んでカスタムフィールド取り出すときもget_post_meta()で一個ずつ取り出すんじゃなくて、get_post_custom()でまとめて取り出したり…。

ここでは主にワードプレスのカスタムフィールドのキャッシュについて紹介します。

  1. キャッシュはされてる
  2. どこまでまとめてキャッシュされる?
  3. 大丈夫まとめてキャッシュされてる
  4. まとめ

キャッシュはされてる

まずいきなりですが、カスタムフィールドを取得すると、一番最初のget_post_meta()とかで一回はデータベースアクセスが発生します。こりゃ当たり前として、そのあとはこの値が自動でキャッシュされるんでもう一度get_post_meta()を呼んでも今度はデータベースアクセスは発生せず、保存されてるキャッシュの値が使われます。

よし安心!言いたいところですが…。

どこまでまとめてキャッシュされる?

どこまでまとめてキャッシュされる?というのは、例えばname,priceと2つのカスタムフィールドがその投稿に設定されているとして、get_post_meta(‘name’)としたらnameの値がキャッシュされるのはいいとして、priceはどうなんねん、というギモンです。

冒頭で紹介したget_post_custom()は、その投稿に設定されているカスタムフィールドをまとめて1つのSQLクエリで(1回のデータベースアクセスで)取得できます。

get_post_meta()ではnameはキャッシュされるけどpriceを取得するときにデータベースアクセスが発生するなら計2回となって、結局get_post_custom()で1回で取得する方がデータベースアクセスは減らせるってことになります。

大丈夫まとめてキャッシュされてる

これも大丈夫。

get_post_meta(‘name’)したタイミングでその投稿に設定されているカスタムフィールド全て(今回の場合name、price)を取得してキャッシュに登録しています。

んでその中から今回リクエストしてるnameの方だけ返り値として返してくれてます。

結局、

ワードプレスのカスタムフィールドはget_post_meta()使おうがget_post_custom()使おうがデータベースアクセスは1回だけ!

ていう事。なんも気にせずにぐちゃぐちゃに書いてもちゃんと内部で吸収してくれてて安心ですね。

まとめ

ワードプレスのカスタムフィールドを取得債のSQLクエリ発行数というかデータベースアクセス数を紹介しました。

とりあえずキャッシュされるんで適当でOK!という事が分かったんでかなりラフに書いていけますね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /