phpwordpressgravity-forms-plugin

Change Wordpress user role on gravityforms submission


I am using Gravityforms along with User registration add-on and have a form which when submitted should change the role of the current user to a new role without any underlying conditions.

Using the gravity\forms docs https://docs.gravityforms.com/gform_user_updated/#1-update-user-role and trying this:

add_action( 'gform_user_updated_3', 'change_role', 10, 3 );
function change_role( $user_id, $feed, $entry, $user_pass ) {

    global $current_user;
    get_currentuserinfo();
    $user_id = $current_user->ID;

    echo $user_id;
    if( ! $user_id ) {
        return;
    }
    $user = new WP_User( $user_id );
    $user->set_role( 'role' );     // update 'role' to the name of the desired role

}   

But its not working! Does anyone have any idea why this is incorrect or any other modifications to the code?


Solution

  • There's a couple things I see with your code when comparing it to the Gravity Forms doc.

    Here's your code with some added comments:

    add_action( 'gform_user_updated_3', 'change_role', 10, 3 );
    
    function change_role( $user_id, $feed, $entry, $user_pass ) {
    
        global $current_user; //  you probably don't need this
        get_currentuserinfo(); // you probably don't need this
        $user_id = $current_user->ID; // $user_id should already be a numeric value passed in to the function containing the logged in user's ID so you shouldn't need to do this. You're resetting the $user_id variable here to whatever is being pulled out of the get_currentuserinfo() function, and I'm guessing that's the problem
    
        //I would get rid of this echo and if statement
        echo $user_id;
        if( ! $user_id ) {
            return;
        }
    
        $user = new WP_User( $user_id );
        $user->set_role( 'role' ); // the word "role" here needs to be the role name
    
    }
    

    I think you can simplify it some. Try this instead:

    add_action( 'gform_user_updated_3', 'change_role', 10, 3 );
    
    function change_role( $user_id, $feed, $entry, $user_pass ) {
    
        $user = new WP_User( $user_id );
        $user->set_role( 'new_role_name_here' ); // Add an existing role here to update the user too
    
    }