• Resolved schmexk

    (@schmexk)


    Hi, I want to do the following:

    Remove a specific role when order status is changed to completed (but keep all other roles). Can you or your plugin help please?

Viewing 8 replies - 1 through 8 (of 8 total)
  • Plugin Support yuriinalivaiko

    (@yuriinalivaiko)

    Hello @schmexk

    The Ultimate Member plugin can not remove a specific role when order status is changed to completed.

    There is no “order” feature in the Ultimate Member plugin. I think you use a kind of e-commerce plugin on your site. You have to ask for help in this e-commerce plugin support forum.

    Regards

    @schmexk

    You can try this code snippet.
    Select first or second add_action depending on which WooCommerce status change you want to use.

    Change $roleID = 'um_prospect'; to the role ID you want to remove from the user.

    add_action( 'woocommerce_order_status_completed', 'order_complete_remove_a_role', 10, 1 );
    add_action( 'woocommerce_payment_complete', 'order_complete_remove_a_role', 10, 1 );
    
    function order_complete_remove_a_role( $order_id ){
        
        $roleID = 'um_prospect';
    
        $order = wc_get_order( $order_id );
        $user = $order->get_user();
        if ( ! empty( $user ) ) {
            if ( in_array( $roleID, $user->roles )) {
                $user->remove_role( $roleID );
                UM()->user()->remove_cache( $user->ID );
            }
        }
    }

    Install the code snippet to your active theme’s functions.php file
    or use the “Code Snippets” plugin.

    https://www.ads-software.com/plugins/code-snippets/

    Thread Starter schmexk

    (@schmexk)

    Hey @missveronicatv , thanks very much, i am about to try this.

    What would be the code, if i want to replace the specific role with another specific role? I will also ask chatgpt, but thanks alot ??

    Thread Starter schmexk

    (@schmexk)

    Also, I would use as a trigger a plugin (automatewoo) and only want to use the custom code for the action – how do I change the code in this case? Thanks

    Thread Starter schmexk

    (@schmexk)

    ChatGPT comes up with this code, what do you think? ??

    $user_id = 123;
    $new_role = 'editor';
    
    $user_data = array(
        'ID' => $user_id,
        'role' => $new_role
    );
    
    wp_update_user($user_data);
    

    @schmexk

    You must get the action hook name from the “automatewoo” plugin source or ask the developers and update the first line in the code snippet.

    
    add_action( 'automatewoo_action_hook', 'order_complete_remove_a_role', 10, 1 );
    
    function order_complete_remove_a_role( $order_id ){
        
        $roleID = 'um_prospect';
        $new_roleID = 'um_new_role';
    
        $order = wc_get_order( $order_id );
        $user = $order->get_user();
        if ( ! empty( $user ) ) {
            if ( in_array( $roleID, $user->roles )) {
                $user->remove_role( $roleID );
                $user->add_role( $new_roleID );
                UM()->user()->remove_cache( $user->ID );
            }
        }
    }
    Plugin Support yuriinalivaiko

    (@yuriinalivaiko)

    Hi @schmexk

    Have you already customized the role changing? Can I mark this thread Resolved?

    A code that @missveronicatv provided is exactly what you need. Just replace the 'automatewoo_action_hook', 'um_prospect' and 'um_new_role' with a proper hook, old role and new role you need.

    Plugin Support andrewshu

    (@andrewshu)

    Hi @schmexk

    This thread has been inactive for a while so we’re going to go ahead and mark it Resolved.

    Please feel free to re-open this thread if any other questions come up and we’d be happy to help. ??

    Regards

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘Remove Role after Status Change’ is closed to new replies.