web-dev-qa-db-ja.com

これはcurrent_filter()の正しい使用例ですか?

これは current_filter() の使用例ですか?

<?php
add_filter("_my_filter", "common_function");
add_filter("_another_filter", "common_function");
function common_function(){
  $currentFilter = current_filter();
  switch ($currentFilter) {
    case '_my_filter':
      echo "Called by My Filter";
      break;
    case '_another_filter':
      echo "Called by another filter";
      break;
  }
}

current_filter()は現在の実行が行われているフィルタの名前を取得するために使用されているのでしょうか。

3
rsman

こんにちは@ラジSekharan

私には良さそうに見えますが、現在の使い方を本当にあなたの質問で知りたいのですか、それともcurrent_filter()がどこから情報を得ているのか理解したいですか?

後者の場合、これは基本的にすべての異なるフック処理関数で起こることです。 do_action()apply_filters()do_action_ref_array()apply_filters_ref_array()大幅に単純化された、もちろん):

<?php
function <process_hook>($hook, $value) {
  global $wp_filter, $wp_current_filter;
  $wp_current_filter[] = $hook;  // "Push" the hook onto the stack.
  $value = call_user_func($wp_filter[$hook]['function'],$value);
  array_pop($wp_current_filter);
  return $value;
}

それからcurrent_filter()がすることはすべて最後のフックをグローバルなwp_current_filter配列に "プッシュ"することです。

<?php
function current_filter() {
  global $wp_current_filter;
  return end( $wp_current_filter );
}
5
MikeSchinkel

一般に、はい、これは有効な使用法です。私があなたであれば、私はさまざまなフィルタにさまざまな機能を渡し、他の機能の共通部分を抽象化します。

このようにあなたの機能のどれでもまさに一つのことをするでしょう。

0
Nikolay