首页 文章

除非在管理面板中刷新用户页面,否则Wordpress角色不会升级

提问于
浏览
1

您好,我正在使用带有S2member pro插件的Ultimate Member插件,最终成员有自己的角色,称为社区角色 . S2member也有自己的角色叫 s2member_level1 我试图将那些2组合起来,每当 s2member_level1 角色有一些用户最终成员社区角色时,也会改为溢价 . 我正在使用此代码来实现这一目标 .

global $ultimatemember;
$user_id = get_current_user_id();
if( current_user_is(s2member_level1) ) {
  update_user_meta($user_id, 'role', 'premium');
} elseif ( current_user_is(s2member_level0) ){
  update_user_meta($user_id, 'role', 'member');
} else {

}

它的工作方式就像某个人具有 s2member_level1 角色而不是将最终成员角色更新为premium,如果 S2member_level0 表示成员没有成员资格或已经过期,那么它也会将最终成员角色更改回 member ,这是wordpress角色的订阅者 .

Problem: 它只有当我刷新wordpress管理面板用户部分而不是一切更新如果我不刷新它和用户s2member角色改变它没有反应用户仍然只能访问高级用户部分,但当我刷新或访问用户wordpress管理面板部分应该更新的所有角色,不更新此操作 .

为什么会发生这种情况以及如何解决?

2 回答

  • 0

    像我这样的人解决方案:

    global $ultimatemember;
    $user_id = get_current_user_id();
    if( current_user_is(s2member_level1) ) {
      update_user_meta($user_id, 'role', 'premium');
      delete_option( "um_cache_userdata_{$user_id}" );
    } elseif ( current_user_is(s2member_level0) ){
      update_user_meta($user_id, 'role', 'member');
      delete_option( "um_cache_userdata_{$user_id}" );
    } else {
    
    }
    

    我添加了 delete_option( "um_cache_userdata_{$user_id}" );

    你可能会问这是什么,插件最终成员有一个非常愚蠢的缓存系统,如果你想使用一些自定义的东西,它不包括他们的缓存清理,所以每当你去用户的时候,其中一个终端成员清除缓存时加载页面,最好将此代码包含在将来你将要做的所有自定义代码中,因为它不会因为缓存问题而无法工作...

  • 0

    我不明白为什么他们需要缓存用户数据,无论如何我遇到了与高级自定义字段相同的问题 .

    我使用ACF在用户 Profiles 页面上显示和管理自定义用户字段 .

    但是这个页面上的每个更改都不会在其模态信息页面上显示,因为它们有缓存 .

    我已删除所有旧缓存然后我关闭:

    Ultimate Member -> Settings -> Advanced -> Stop caching user’s profile data

    然后,他们每次都会从提交密钥的usermeta获取数据 .

相关问题