5

我试图弄清楚同一个函数是否与多个动作挂钩,我能弄清楚哪个动作调用它吗?

我想在创建和删除用户时发出 API 调用;两种情况下的功能都是相同的,只是一个数据点会根据其创建或删除而有所不同。做两个相同的功能只有一个区别感觉不对,但我不确定我还能怎么做。

建议?

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 回答