WordPressのTransients APIで有効期限付きのデータを保存する。

前回の記事で紹介しているプラグインでは、FacebookのURLリンターというページにfile_get_contents()でアクセスしてキャッシュを更新しているのですが、エラー処理についてtwitterでアドバイスを頂きました。

twitter APIの不具合でリンクが切れちゃいますが、admin_noticesというフックで管理画面に警告を出せるそうです。

How to show an urgent message in the WordPress admin area

でもこれが意外と一筋縄ではいきませんでした。

WordPressではsave_postフック後にリダイレクトしてしまうので、admin_noticesフックに放りこんでも意味が無い…

一時的なデータにフラグを保存して、リダイレクト後にadmin_noticesフックをコールする必要があります。

おー、Transients APIなどというものが!

これを使うと有効期限付きの一時データを保存することができるそうです。

Transients API – WordPress Codex 日本語版

この関数のソースはwp-includes/functions.phpにあって、ざっと眺めてみると有効期限のデータとset_transient()で指定されたデータの二つをadd_option()して、get_transientの時に有効期限外なら削除という処理をしているようです。

キャッシュ系のプラグインでスピードアップされるので、twitterやGoogleなどのAPIから取得したデータを保存するとか、重いSQLの結果を保存するとか、そういう時に威力を発揮しそうです。

$autoloadがnoになってるので、キャッシュ系のプラグインを使用するとスピードアップするけど、使ってないときにはクエリーが一回増えるということかな?

へー、上手く考えてありますね。

まとめ

  • wp_remote_get()を使うと外部へのリソースにアクセスするのが楽になる。
  • admin_noticesフックを使うと管理画面でエラーメッセージを出せる。
  • Transients APIを使うと有効期限付きのデータをオプションに保存できる。