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。