我想做这样的事情:
function activate_account_callback($user_id) {
function footer_callback() {
// Do some stuff with $user_id
};
add_action('wp_footer', footer_callback);
};
add_action('bp_core_activate_account', 'activate_account_callback');
即,bp_core_activate_account
事件我要将事件附加到wp_footer
。我遇到的问题是内部函数footer_callback
似乎无法访问传递给$user_id
的{{1}}参数(我不是一个PHP程序员,我不完全确定PHP作用域是如何工作的。)
所以我想做的就是以某种方式创建一个不带参数但可以访问activate_account_callback
变量的新函数。
因此,我想解决问题的方式归结为希望这样做:
$user_id
然后我可以使用function func1($arg) {
echo($arg);
}
function func2 = some_magic($func1, 3);
func2(); // Should echo "3"
函数并将其传递给内部func2
。我只是不知道add_action
应该是什么。
或者,如果这是一种固有的愚蠢做事方式,我可以接受其他建议。
答案 0 :(得分:1)
在类似函数中调用函数不是很标准,无论如何都不需要这样做。被激活的用户也是登录到WordPress的用户吗?如果你可以使用wp_get_current_user()
,那么可以省去一些努力。
如果你需要将$ user_id从一个函数带到另一个函数,在钩子之间,你不能直接传递它,函数的范围对你不起作用。您可以使用全局变量,或者使用带有静态变量的函数。
function activate_account_callback($user_id) {
global $bpcore_activated_uid;
$bpcore_activated_uid = $user_id;
add_action('wp_footer', activate_account_footer);
};
function activate_account_footer() {
global $bpcore_activated_uid;
if ( !$bpcore_activated_uid ) return;
echo "Activated user ID: " . $bpcore_activated_uid;
}
add_action('bp_core_activate_account', 'activate_account_callback');
我们将以这种方式调用目标两次,第一次将仅用于捕获用户ID。一旦捕获,未来的呼叫将具有该值。你想要这个全局变量的唯一真正原因是你不需要其他地方的用户ID。
function activate_account_callback($user_id) {
activate_account_footer( $user_id ); // Pass the user ID
add_action('wp_footer', activate_account_footer);
};
function activate_account_footer($u = null) {
static $user_id = null;
if ( $u && !$user_id ) {
$user_id = $u;
return; // capture and abort
}
if ( !$user_id ) return; // In case we never provide the value, abort
echo "Activated user ID: " . $user_id ;
}
add_action('bp_core_activate_account', 'activate_account_callback');
注意:
$bp
(存在,但我不知道它是否包含ID)。