Remove Role after Status Change
-
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?
-
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
You can try this code snippet.
Select first or secondadd_actiondepending 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.phpfile
or use the “Code Snippets” plugin.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 🙂
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
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);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 ); } } }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.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
The topic ‘Remove Role after Status Change’ is closed to new replies.