我试图弄清楚同一个函数是否与多个动作挂钩,我能弄清楚哪个动作调用它吗?
我想在创建和删除用户时发出 API 调用;两种情况下的功能都是相同的,只是一个数据点会根据其创建或删除而有所不同。做两个相同的功能只有一个区别感觉不对,但我不确定我还能怎么做。
建议?
这就是功能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;
}
}
我有同样的问题——运行一个函数时,哪个动作触发了它?关键是$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....
}
}
注意:这是一个糟糕的用例示例,但它传达了原则!