リクエスト応答を終了する前に何かを処理する

リクエスト応答を終了する前に何かを処理する - いつか使う?shutdownアクション

説明

PHPでは、register_shutdown_function関数を使うことでリクエストに対してレスポンスを返した後に何らかの処理を行うことができる。WordPressでもregister_shutdown_function関数は使えると思うのだが、テーマ内のテンプレートでページを表示した後で何かを行う場合はどうすればいいのか、ちょっと調べてみた。

まずWordPressでregister_shutdown_function関数を使っているかを調べてみた。最新(3.6.1現在)のソースコードを眺めると、キャッシュ管理を行うWP_Object_Cacheクラス、データベースアクセス管理を行うwpdbクラス、wp-settings.phpの中でregister_shutdown_function関数を呼び出していることがわかった。

ここで注目したのは、wp-settings.phpの中の呼び出しで、shutdown_action_hookというプライベート関数を登録していた。このshutdown_action_hook関数ではshutdownアクションを実行しており、プラグインや自テーマのfunctions.phpなどで直接register_shutdown_function関数を呼び出すよりも、add_action関数でshutdownアクション関数を登録するほうがWordPressの行儀にあっているだろう。

add_action( 'shutdown', 'my_shutdown' );
function my_shutdown() {
	// ここに処理内容を記述
}

今回調べたきっかけは、ファイルキャッシュ系のプラグインを作るためだった。実際のところ、リクエスト応答の流れをトレースしてみると、PHPのob_start関数を呼び出してバッファを開始した場合、shutdownアクションが実行される前にob_start関数でバッファされた内容はフラッシュ(出力)されていた。結論として、shutdownアクションの前にバッファされた内容を取得して必要な処理を行わなければならず、最終的にはob_start関数のコールバック関数を指定することで目的は実現できた。

このように羽陽曲折があったわけだが、いつか使う時が来ることを期待してshutdownアクションについてメモっとく。

関連

  • add_action - アクション関数を追加する

お勧めコンテンツ

category_description(2009年12月14日 登録)

string category_description( [ int $category = 0 ] )
カテゴリーの説明文を取得する。

add_query_arg(2013年1月22日 登録)

string add_query_arg( mixed $param1 [ , mixed $param2 [ , mixed $param3 ] ] )
クエリーURIを更新する。

get_option(2009年11月12日 登録)

mixed get_option( string $setting [ , mixed $default = false ] )
パラメータ$settingで指定されたオプションの値を取得する。

wp_get_nav_menu_object(2010年6月8日 登録)

mixed wp_get_nav_menu_object( string $menu )
ナビゲーションメニューデータを取得する。

esc_attr_e(2010年6月17日 登録)

void esc_attr_e( string $text [ , string $domain = 'default' ] )
現在のロケールに応じた翻訳テキストを取得し、その中に含まれている特殊文字をHTMLエンティティに変換してから表示する。

最終更新日時 : 2013-09-26 11:22