PHP/WordPress——在绑定时添加_操作调用的绑定参数
我想这样做:PHP/WordPress——在绑定时添加_操作调用的绑定参数,php,wordpress,Php,Wordpress,我想这样做: 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'); 例如,在b
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\u core\u activate\u account
事件中,我想将事件附加到wp\u footer
。我遇到的问题是,内部函数footer\u callback
似乎无法访问传递给activate\u account\u callback
的$user\u id
参数(我不是PHP程序员,也不完全确定PHP作用域是如何工作的)
所以我想做的是以某种方式创建一个新函数,它不接受任何参数,但可以访问$user\u id
变量
因此,我想解决这个问题的方法归结为想要做到这一点:
function func1($arg) {
echo($arg);
}
function func2 = some_magic($func1, 3);
func2(); // Should echo "3"
然后我可以使用func2
函数并将其传递给内部add\u操作
。我只是不知道什么是魔法
或者,如果这是一种天生愚蠢的做事方式,我愿意接受其他建议。在这样的函数中调用函数不是很标准,你也不需要这样做。激活的用户也是登录WordPress的用户吗?如果您只需使用
wp\u get\u current\u user()
,就可以节省一些工作量
如果需要在钩子之间将$user_id从一个函数传递到另一个函数,则不能直接传递它,函数的范围也不适合您。可以使用全局变量,也可以使用带有静态变量的函数
使用全局变量
(更新)使用静态变量 我们将以这种方式调用目标两次,第一次仅用于捕获用户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)不幸的是,在激活帐户时,用户实际上没有登录(这是一个单独的步骤)因此,
wp\u get\u current\u user
不适用。这个答案看起来很有用,虽然我觉得没有全局变量会更好。全局变量,不管大家怎么说,实际上对这个目的很有用。你需要将一个值传递到你的代码的完全不同的部分。我添加了一个静态v变量选项,它更难看,有更多的行,但没有全局变量。另一个选项是使用带有define
的常量,但这与全局变量没有太大区别。是的,你说得对,它很有用,静态变量实际上并不比全局变量差,而是一个将局部函数转换为g的解决方案我认为,解决范围界定问题比两者都好。当你说它不能同时用于多个用户激活时,如果两个人尝试快速连续激活他们的帐户,这是否适用于竞争条件?我不需要批量激活。你能详细说明“只需切换到阵列”吗为此?事实上,我怀疑这种情况是否会发生,除非您是管理员并使用“批量编辑”手动激活多个帐户选项。如果两个用户同时从不同的计算机激活,则没有问题。只有在同一请求下,为不同的用户运行两次activate\u account\u callback
函数。此外,关于全局函数与静态函数与局部函数。这真的没有什么区别。正确的方法是e为原始插件(buddypress,是吗?)设置全局可访问的用户ID。因此,不仅您的脚本,buddypress插件也使用相同的变量。不过,我在源代码中没有看到该变量,这就是我的代码的用途(一种变通方法)。
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');