我的wordpress网站有两种类型的用户。当他们注册时,他们会指定他们的用户类型,我想根据他们的用户类型分配两个角色中的一个。
我的用户注册页面有一个单选按钮,新用户选择是否在两种类型的注册之间。为了讨论的目的,我们可以将注册类型称为“Cat”和“Dog”。
我在重力形式中添加了Cat / Dog单选按钮,用户可以在其中选择“Dog” - 单选按钮默认为“Cat”。这个字段是'RegisterAs'。
Gravity Form User Registration允许我在新用户上设置角色。我为所有新注册选择'狗'
用于收集新用户数据的重力表单确认将其重定向到cat-or-dog页面:
cat-or-dog页面分配了一个模板 - 我们的调用是'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] =&gt; string(6)“cat”}之后:array(1){[0] =&gt;串(6) “猫”}
所以看起来add_role什么也没做!
任何人都可以更正我的代码吗?或者在用户注册期间,可能还有另一种方法可以在单选按钮上指定角色。
我想使用带有用户注册插件的Gravity Forms,因为它在整个站点中使用,而且我不是插件的收集器。
请注意,我还没有删除'Cat'角色 - 我首先想要克服这个add_role问题。然后我将努力删除角色。
答案 0 :(得分: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 );
请注意,添加角色'dog'是小写的,即使该角色实际上是正确的'Dog'。