When You Only Need to Target One Product
In the example here, when someone purchases the product with a product ID of 999, we remove their old role (customer) and set their new role to the Premium Member (premium_member) role.
You can get your product ID by pulling up your product list in the WordPress dashboard and hovering over the product name.
- Adjust $product_id = 999 to reflect your particular product ID
- Adjust the remove_role and add_role entries as desired
PHP
add_action( 'woocommerce_order_status_completed', 'wptu_change_role_on_purchase' );
function wptu_change_role_on_purchase( $order_id ) {
// get order object and items
$order = new WC_Order( $order_id );
$items = $order->get_items();
$product_id = 999; // that's a specific product ID
foreach ( $items as $item ) {
if( $product_id == $item['product_id'] && $order->user_id ) {
$user = new WP_User( $order->user_id );
// Remove old role
$user->remove_role( 'customer' );
// Add new role
$user->add_role( 'premium_member' );
}
}
}When You Need to Target Multiple Products
In the example here, when someone purchases any of the products that match product ID 268, 269, or 270, we remove their old role (‘subscriber’) and set their new role to ‘customer.’
You can get your product ID by pulling up your product list in the WordPress dashboard and hovering over the product name.
- Adjust $products_to_check = array to reflect your particular product IDs
- Adjust the remove_role and add_role entries as desired
PHP
add_action( 'woocommerce_order_status_completed', 'wptu_change_role_on_purchase' );
function wptu_change_role_on_purchase( $order_id ) {
// get order object and items
$order = wc_get_order( $order_id );
$items = $order->get_items();
$products_to_check = array( '268', '269', '270' );
foreach ( $items as $item ) {
if ( $order->user_id > 0 && in_array( $item['product_id'], $products_to_check ) ) {
$user = new WP_User( $order->user_id );
// Remove role
$user->remove_role( 'subscriber' );
// Add role
$user->add_role( 'customer' );
// Exit the loop
break;
}
}
}