Join

Set User Role Based On WooCommerce Product Purchase

Don't want to mess with code snippets? Request for this to be a feature of MyListing Pro.

Instructions

  1. Create a new PHP code snippet.
  2. Copy the contents of code snippet below.
  3. Paste the contents into your code snippet.
  4. Review any notes that I’ve provided.
  5. Save and enable the code snippet.
  6. Test.

Snippet

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.

  1. Adjust ‘$product_id = 999’, to reflect your particular Product ID.
  2. 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.

  1. Adjust ‘$products_to_check = array’, to reflect your particular Product IDs.
  2. 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;
        }
    }
}