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.
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.
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;
}
}
}