Wordpress 在更新时使用表单选择更改当前用户角色(而不是创建条目)

Wordpress 在更新时使用表单选择更改当前用户角色(而不是创建条目),wordpress,forms,hook,user-roles,Wordpress,Forms,Hook,User Roles,我在Wordpress中使用强大的表单,并且有一个注册用户的表单。我可以使用注册表中的单选按钮来确定他们的角色。我有一个钩子。然而,我需要的是一个钩子,它将根据表单条目更新时的无线电选择来更改用户角色。我的当前代码仅在创建条目时有效。以下是注册时分配角色的代码: add_filter('frmreg_new_role', 'frmreg_new_role', 10, 2); function frmreg_new_role($role, $atts){ extract($atts);

我在Wordpress中使用强大的表单,并且有一个注册用户的表单。我可以使用注册表中的单选按钮来确定他们的角色。我有一个钩子。然而,我需要的是一个钩子,它将根据表单条目更新时的无线电选择来更改用户角色。我的当前代码仅在创建条目时有效。以下是注册时分配角色的代码:

add_filter('frmreg_new_role', 'frmreg_new_role', 10, 2);

function frmreg_new_role($role, $atts){
  extract($atts);
  if($form->id == 8){
    if($_POST['item_meta'][280] == 'Job Applicant')
      $role = 'applicant';
  }
  return $role;
}
“8”是表单本身的id。“280”是单选按钮字段的id,“Job Appender”是其中一个值。“申请人”是我们网站的用户角色之一

我需要一个适应这将改变角色后,条目已经创建,在更新。我能找到的最接近的东西是一个钩子,它在成功支付PayPal后改变了用户角色。我试着把两者结合起来,但没能成功。以下是PayPal生成的用户角色转换程序:

add_action('frm_payment_paypal_ipn', 'change_paid_user_role');

function change_paid_user_role($args){
    $new_role = 'contributor'; //change this to the role paid users should have

    if(!$args['pay_vars']['completed'])
       return; //don't continue if the payment was not completed

    if(!$args['entry']->user_id or !is_numeric($args['entry']->user_id))
       return; //don't continue if not linked to a user

    $user = get_userdata($args['entry']->user_id);
    if(!$user)
        return; //don't continue if user doesn't exist

    $updated_user = (array)$user;

    // Get the highest/primary role for this user  
    $user_roles = $user->roles;
    $user_role = array_shift($user_roles);
    if ( $user_role == 'administrator' ) 
        return; //make sure we don't downgrade any admins

    $updated_user['role'] = $new_role;

    wp_update_user($updated_user);
}

更新:根据强大的论坛,操作钩子应该是:frm\u创建条目后的frm\u。

很多时候,研究核心文件比任何谷歌或手册都更有效率。在代码编辑器中删除整个插件目录,并在创建条目后搜索字符串
frm\u
将我们带到这个钩子发生的地方

之后,还有
update()
方法,它提供了操作挂钩:
frm\u-After\u-update\u条目

这个钩子传递两个参数:
$id
$new\u值['form\u id']
。我无法复制您的设置,因此测试挂钩取决于您

参考:

在本例中:

add_action( 'frm_after_update_entry', 'change_role_to_staff', 10, 2); 

function change_role_to_staff( $form_id, $values ){ 
    var_dump($values);
    die();
}
  • 因为这是一个动作钩子,所以不需要返回任何内容
  • 没有
    $roles
    $atts
    ,参数是表单ID和值
  • 您要查找的是
    $values
    中的内容
  • var\u dump()
    die()
    用于调试目的,必须在测试后立即删除
  • 使用此值更新用户并修改以前的代码

很多时候,研究核心文件比谷歌或手动搜索更有效率。在代码编辑器中删除整个插件目录,并在创建条目后搜索字符串
frm\u
将我们带到这个钩子发生的地方

之后,还有
update()
方法,它提供了操作挂钩:
frm\u-After\u-update\u条目

这个钩子传递两个参数:
$id
$new\u值['form\u id']
。我无法复制您的设置,因此测试挂钩取决于您

参考:

在本例中:

add_action( 'frm_after_update_entry', 'change_role_to_staff', 10, 2); 

function change_role_to_staff( $form_id, $values ){ 
    var_dump($values);
    die();
}
  • 因为这是一个动作钩子,所以不需要返回任何内容
  • 没有
    $roles
    $atts
    ,参数是表单ID和值
  • 您要查找的是
    $values
    中的内容
  • var\u dump()
    die()
    用于调试目的,必须在测试后立即删除
  • 使用此值更新用户并修改以前的代码

是的,正如我所提到的,我使用的是“强大的表单”。对于那些不熟悉的人,我应该澄清这是插件的名称。抱歉。忘了提到强大的论坛说在为我正在尝试做的事情创建条目后,frmreg_新角色应该被frm_替换。但是我不能让它工作。哦,他们在没有向后兼容性的情况下更改了钩子的名称。。。他们真好;)关于取消礼貌,请参见:。而且,在这里,你通过投票选出有用的答案来感谢人们:o)是的,正如我提到的,我使用的是“强大的表单”。应该为那些不熟悉的人澄清这是插件的名称。抱歉。忘了提到强大的论坛说在为我正在尝试做的事情创建条目后,frmreg_新角色应该被frm_替换。但是我不能让它工作。哦,他们在没有向后兼容性的情况下更改了钩子的名称。。。他们真好;)关于取消礼貌,请参见:。在这里,你通过投票选出有用的答案来感谢人们:o)我感谢你指出这一点。我已经开始研究它,我不确定我是否能够以那种方式弄清楚它。我确实试过下面的钩子,但没用。也许你看到了一些明显的我做错了的事情:添加操作(“更新条目后的frm\U”,“将角色更改为员工”,10,2);函数将角色更改为职员($role,$atts){extract($atts);if($form->id==8){if($\u POST['item\u meta'][280]='Current staff')$role='staff';}返回$role;}我对此表示感谢。这很有帮助。我还没有一点运气。我尝试了以下有和没有提取($values)的方法;其中:添加行动('frm_在_更新_条目之后,'change_role_to_staff',30,2);函数将角色更改为职员($form\u id,$values){extract($values);if($form->id==8){if($\u POST['item\u meta'][280]='Current staff')$role='staff';}$updated\u user['role']=$new\u role;wp\u update\u user($updated\u user)}第一次使用调试工具时,条目没有正确更新;只显示了int(8),其他什么都没有。我很感激你给我指出这一点。我已经开始研究它,我不确定我是否能够以那种方式弄清楚它。我确实试过下面的钩子,但没用。也许你看到了一些明显的我做错了的事情:添加操作(“更新条目后的frm\U”,“将角色更改为员工”,10,2);函数将角色更改为职员($role,$atts){extract($atts);if($form->id==8){if($\u POST['item\u meta'][280]='Current staff')$role='staff';}返回$role;}我对此表示感谢。这很有帮助。我还没有一点运气。我试过以下有无extr