【キャッシュ問題】tablepress内でショートコードで出力した内容が更新されない問題を解決

閲覧数:903 views

あなたが今、読んでいるカテゴリー:
覚書

スポンサーリンク

tablepressプラグインで作成した表の中でショートコードで動的に取得した内容を表示したい場面があった。

で、以下のような問題が発生した。

  • 動的に取得した値ではなく、前表示していた値(キャッシュの値)が表示される
  • しばらくたったら、更新されている
  • ログインユーザー時の場合は更新されている
  • ログインユーザーでない場合に更新されていない

条件が複雑すぎて、何が原因かしらべていたら、下記の記事にたどりついた。

Tablepressのキャッシュ問題  | モノグサにお灸

これの原因は、ようは、テーブルプレスが、キャッシュを保持しておいて出力するとのこと。で、上記の解決方法として、tablepressの表を再更新する必要があるとのことだった。先人さん、いつも情報ありがとうございます。

ソースコードを解析して、今回、もう少し、スマートに解決する方法を見つけたので、ご紹介。

解決方法

ショートコードのオプションに cache_table_output=false を指定する

使用例は以下

これで、キャッシュを使用せずに、常に最新の情報を取得して表示してくれる。

解説

tablepress\controllers\controller-frontend.php内で、以下の処理をおこなっている。

cache_table_outputが指定されていて、ログインユーザーでない場合は、24時間経過するまでは、キャッシュを使用するという処理になっている。

 

で、cache_table_outputは、何かというと、tableをショートコードで作成するときに指定できるオプションなのである。

こいつが、指定していない場合は、デフォルトでtrueになっているのだ。(ここまでの条件をすべてまとめると、最初に列挙した4つの条件にすべて当てはまる)

tablepress\classes\class-render.php内。

ここで列挙しているオプションは、テーブル作成時に指定できるオプションと捉えてよいと思う。ただ、他のオプションは解析してないので、もし使えそうな名前のオプションがあれば、grepかけてみてください。

ちなみにこのget_default_render_options関数はテーブルを作成する以下で呼ばれます。ソースコードを読むと、$shortcode_attsで指定されているオプションを優先する処理になっていた。

 

まとめ

tablepressのキャッシュ問題は、ショートコードでテーブルを作成する際に、cache_table_output=false を指定で、解決できる!

スポンサーリンク
This entry was posted in 覚書.