2016-01-16 26 views
0

我的WordPress的网站有两种类型的用户。当他们注册时,他们提名他们的用户类型,并且我想要分配两个角色中的一个角色,具体取决于他们是哪一种用户类型。WordPress的用户角色 - 重力形式用户注册 - 有条件地add_role

我的用户注册页面有一个单选按钮,新用户在这里选择他们是否在两种注册类型之间。为了讨论的目的,让我们调用注册类型'猫'和'狗'。

我已经添加了一个猫/狗单选按钮到重力形式,用户可以选择'狗' - 单选按钮默认为'猫'。这个字段是'RegisterAs'。

重力形式用户注册允许我为新用户设置角色。我选择了“狗”为所有新注册

用于收集新用户数据重力形式所具有的确认重定向到一个猫或狗页: Confirmation

的猫或狗页面有一个分配给它的模板 - 我们称之为'cat-or-dog.php'。这包含此代码:

<?php 
/* Template Name: Cat or Dog */ 
if (isset($_GET['RegAs'])) { 
if ($_GET['RegAs']=='Dog') { 
global $current_user; 
var_dump($current_user->roles); 
$current_user->add_role('Dog'); 
echo "After:"; 
var_dump($current_user->roles); 
die(); 

我希望输出显示从狗到猫的角色变化。相反,从这里输出如下:

array(1){[0] => string(6)“cat”} after:array(1){[0] => string(6) “cat”}

所以看来,add_role什么都不做!

任何人都可以更正我的代码吗?或者,在用户注册过程中,还有另一种方式可以在单选按钮上分配角色。

我想使用重力形式与用户注册插件,因为这是用于整个网站,我不是一个插件收集器。

请注意,我还没有删除'猫'角色 - 我首先想要克服这个add_role问题。然后我会努力消除这个角色。

回答

0

gform_user_registered挂钩由Gravity Forms代码提供以实现此目的。

https://www.gravityhelp.com/documentation/article/gform_user_registered/

在我的主题functions.php文件的最顶端,我包括在此代码:

function change_cat_dog_role($user_id, $user_config, $entry, $user_pass) { 
    $question1 = rgar($entry, '8'); //field id 8 


    if ($question1 == 'Dog') { 
     //update role 
     $user_obj = new WP_User($user_id); 
     $user_obj->add_role('dog'); 
    } 
} 

add_action('gform_user_registered', 'change_cat_dog_role', 11, 4); 

注意添加角色“狗”是低的情况下,即使作用实际上正确的情况下'狗'。