我是新来的,所以我希望你会发现我的问题有足够的记录。我已经深入研究了一段时间了,还没有找到令人满意的解决方案,鄙视一些看似相关的!
基本上,我确实想在更新用户配置文件后做一些事情。
更具体地说,我想做的是更新后的用户有一个给定的角色。
在“中”;“我的书”;,我应该使用profile_update 钩子,这项工作,但只是在一定程度上。这是我的密码
add_action( \'profile_update\', \'my_custom_function\', 10, 2 );
function my_custom_function( $user_id ) {
//get data from the updated user
$user_info = get_userdata( $user_id );
//check if user has the role XXX
if ( in_array( \'my_custom_role\', (array) $user_info->roles ) ) {
//do something
}else {
//do something else
}
}
编辑-问题不在上面,实际上上面的代码本身就可以了。如果您遇到上述代码没有预期行为的情况,您可以尝试将优先级更改为25,甚至999以进行调试。
add_action( \'profile_update\', \'my_custom_function\', 999, 2 );
在我的情况下,我没有达到预期的行为,但问题同样不在上面的代码中
编辑-您如何(从何处)更改角色评论中提出了这个问题,这个问题非常重要。
我的第一个回答是:“我的第一个回答是:;我确实更改了wp dashboard用户配置文件编辑页面中的角色;。
但这只是部分正确。
这是正确的,因为我确实从wp dashboard user profile edit页面编辑了我的用户,但接下来会发生什么:
如果我确实更改了在用户配置文件的本机wp角色复选框中检查角色的角色,那么我的代码可以正常工作但我所做的实际上是改变了用户;会员级别“;(在付费会员pro插件领域内),这本身就改变了用户角色是的,在个人资料更新中,角色发生了变化,但在某种程度上(不要问我是哪一个,我还不知道)
编辑-关于paid membership pro设置的说明我确实设置了paid membership pro,它可以创建给定的wp用户角色并将其同步到给定的成员级别。
这一切都完美无瑕。
我在做什么:从wp dashboard用户编辑页面更改用户成员级别(在付费会员pro插件领域内)。
我发生了什么事,为什么要打开这个话题(如果来自原始问题,并进行了细微的澄清编辑)
因此,我确实在wordpress admin用户编辑页面中编辑用户,而真正奇怪的是,使用上面的代码,行为是:
保存用户档案而不更改角色-->;预期行为通过角色更改保存用户配置文件-->;这也意味着如果我改变角色,保存,然后再次保存,这是我第二次遇到预期的行为!但是在profil页面中,在第一次保存之后,更改就出现了(显然,否则我会在其他地方寻找问题)
经过一番阅读,我想这可能是因为当我的函数运行时,用户角色的变化还没有写在数据库中,但可能是不同的?(如何确定?)
因此,我一直在寻找一种方法来延迟我的功能。例如,我发现了一些帖子this one, 或this one, 但他们中没有一个人(还有许多其他人)能做到这一点。
实际上,我只有/需要一个函数,因此第一个函数本身不适用,而第二个函数导致my_custom_function
不获取$user_id
这需要做点什么。
我觉得没有办法解决这个问题很愚蠢,很惊讶以前没有解决过这个问题。
我希望我没有错过我眼皮底下的东西,如果有人能指点我,我会很高兴:)
当做
编辑-$user_info
不为空且包含
object(WP_User)#21062 (8) {
["data"]=>
object(stdClass)#21063 (10) {
["ID"]=>
string(2) "15"
["user_login"]=>
string(9) "MyUserLogin"
["user_pass"]=>
string(34) "XXXXXXXXXXX"
["user_nicename"]=>
string(9) "MyUserNicename"
["user_email"]=>
string(19) "[email protected]"
["user_url"]=>
string(0) ""
["user_registered"]=>
string(19) "2022-02-04 14:04:51"
["user_activation_key"]=>
string(0) ""
["user_status"]=>
string(1) "0"
["display_name"]=>
string(5) "my name"
}
["ID"]=>
int(15)
["caps"]=>
array(1) {
["my_custom_role"]=>
bool(true)
}
["cap_key"]=>
string(22) "wp_XXXX_capabilities"
["roles"]=>
array(1) {
[0]=>
string(12) "my_custom_role"
}
["allcaps"]=>
array(1) {
["my_custom_role"]=>
bool(true)
}
["filter"]=>
NULL
["site_id":"WP_User":private]=>
int(1)
}
编辑-评论谢谢你的许多有用的评论,我现在删除了一些我的答案,在上面的编辑中,它会更容易阅读;)
编辑-结论和后续问题我遇到的问题很可能与付费会员pro改变用户角色的方式有关。
我仍然不能真正理解为什么我不能在个人资料更新中获得新角色,并且仍然认为这是一个时间问题。最终,角色确实发生了变化,所以我应该能够抓住它。
<小时/>