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