1

Wordpress で Formidable フォームを使用しており、ユーザーを登録するフォームがあります。登録フォームのラジオ ボタンを使用して、彼らの役割を決定できます。そのためのフックがあります。ただし、必要なのは、フォーム エントリ UPDATE のラジオ選択に基づいてユーザー ロールを変更するフックです。私の現在のコードは、エントリの作成でのみ機能します。登録時にロールを割り当てるコードは次のとおりです。

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」は、「Job Applicant」が値の 1 つであるラジオ ボタン フィールドの ID です。そして「申請者」は当サイトの利用者の役割の一つです。

エントリが既に作成された後、更新時に役割を変更する、これを適応させる必要があります。私が見つけることができる最も近いものは、PayPal の支払いが成功した後にユーザーの役割を変更するフックです。2つを組み合わせようとしましたが、機能させることができませんでした。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);
}

更新: アクション フックはおそらく次のようにする必要があります: Formidable フォーラムによると、frm_after_create_entry。

4

1 に答える 1

1
于 2013-08-20T01:26:59.400 に答える