If you use the official WooCommerce Subscription plugin, one day or another you will need to know what is the list of subscribers for a given subscription product. In my own specific case, for example, I wanted to know who are the “active” subscribers for my private Business Bloomer Club membership, so that I can display some conditional content.
There is a neat WooCommerce Subscription function called wcs_get_subscriptions_for_product(), which does exactly that: it returns an array of subscription IDs given a chosen subscription product ID. Once you have the array, you can then loop through each subscription ID in order to get whatever you need – you’ll see below a few examples of the most common data. Enjoy!
PHP Snippet: Display List of Active Subscribers For a Given Subscription Product ID (WooCommerce Subscriptions)
/**
* @snippet Get List of Subscribers @ WooCommerce Subscriptions
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 6
* @community https://businessbloomer.com/club/
*/
add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_show_list_active_subscribers', 11 );
function bbloomer_show_list_active_subscribers() {
global $product;
if ( ! $product->is_type( 'subscription' ) ) return;
$subscription_ids = wcs_get_subscriptions_for_product( $product->get_id() );
if ( ! $subscription_ids ) return;
$user_names = array();
foreach ( $subscription_ids as $subscription_id ) {
$subscription = wcs_get_subscription( $subscription_id );
$user_id = absint( $subscription->get_user_id() );
$user = get_user_by( 'id', $user_id );
$user_name = $user->display_name;
$status = $subscription->get_status();
// You can also get other stuff
// $period = $subscription->get_billing_period();
// $interval = $subscription->get_billing_interval();
// $start_date = $subscription->get_date( 'start_date' ) );
// $trial_date = $subscription->get_date( 'trial_end' ) );
// $next_payment_date = $subscription->get_date( 'next_payment' ) );
// $end_date = $subscription->get_date( 'end_date' ) );
if ( $status !== 'active' ) continue; // only active subs
$user_names[] = $user_name; // array of names
}
echo '<p><b>Active subscribers:</b> ' . implode( ", ", $user_names ) . '</p>';
}