5

同じ関数が複数のアクションにフックされているかどうかを調べようとしています。どのアクションがそれを呼び出しているかを調べることはできますか?

ユーザーが作成および削除されたときに API 呼び出しを送信したいと考えています。どちらの場合も機能は同じですが、1 つのデータ ポイントが作成されたか削除されたかによって異なります。1 つの違いだけで 2 つの同一の関数を作成するのは適切ではありませんが、他にどのようにできるかわかりません。

アドバイス?

4

2 に答える 2

7

それが機能current_filter()です:

add_action( 'plugins_loaded', 'common_action' );
add_action( 'admin_init', 'common_action' );

function common_action()
{
    switch( current_filter() )
    {
        case 'plugins_loaded':
            // do_something( 'Plugins loaded' );
        break;
        case 'admin_init':
            // do_another_thing( 'Admin init' );
        break;
    }
}
于 2013-10-10T20:54:27.327 に答える
2

同じ質問がありました-関数を実行するとき、どのアクションがそれをトリガーしていましたか? キーは$wp_current_filterです。

例:

//  Both of these will call the same function
do_action('wp', 'my_function');
do_action('init', 'my_function');

function my_function() {
    // How do I know if this was 'init', 'wp', or some other hook?
    // Global in the WordPress variable $wp_filter
    global $wp_current_filter;
    if ($wp_current_filter == 'wp' || in_array('wp', $wp_current_filter)) {
        // Do my "wp" based stuff....
    }
    if ($wp_current_filter == 'init' || in_array('init', $wp_current_filter)) {
        // Do my "init" based stuff....
    }
}

注:これはお粗末なユースケースの例ですが、原則を伝えています!

于 2015-03-31T22:52:08.467 に答える