get('exclude'); $exclude = array_merge($exclude, subscriptio_get_ids_of_customers_with_subscriptions()); // Set customer ids to exclude $wp_user_query->set('exclude', $exclude); } /** * Check if customer is eligible for trial of specific product * * @access public * @param WC_Product|int $product * @param int $customer_id * @param int $exclude_subscription_id * @return bool */ public static function customer_is_eligible_for_trial($product, $customer_id = null, $exclude_subscription_id = null) { $is_eligible = true; // Load WooCommerce product object if (!is_a($product, 'WC_Product')) { $product = wc_get_product($product); } // Product is not subscription product or parent product provided if (!subscriptio_is_subscription_product($product) || RightPress_Help::wc_product_has_children($product)) { return false; } // Load subscription product object $subscription_product = subscriptio_get_subscription_product($product); // Subscription product does not have free trial set at all if (!$subscription_product->get_free_trial_length()) { return false; } // Get customer id $customer_id = $customer_id ? $customer_id : get_current_user_id(); // Check if customer is registered if ($customer_id) { // Check if free trials are limited if (!RP_SUB_Settings::is('trial_limit', 'no_limit')) { // Iterate over customer subscriptions foreach (subscriptio_get_customer_subscriptions($customer_id, true) as $subscription) { // Subscription did not have a free trial if (!$subscription->get_free_trial()) { continue; } // Subscription is excluded if ($subscription->get_id() === $exclude_subscription_id) { continue; } // One trial per customer per site if (RP_SUB_Settings::is('trial_limit', 'one_per_customer')) { // Customer already has a non-terminated subscription on this site $is_eligible = false; break; } // One trial per product per customer per site else if (RP_SUB_Settings::is('trial_limit', 'one_per_product')) { // Iterate over subscription items foreach ($subscription->get_items() as $item) { // Check both product and variation ids if ($item->get_product_id() === $subscription_product->get_id() || $item->get_variation_id() === $subscription_product->get_id()) { // Customer already has a non-terminated subscription for this product on this site $is_eligible = false; break; } } } } } } // Allow developers to override and return return apply_filters('subscriptio_customer_is_eligible_for_trial', $is_eligible, $subscription_product, $customer_id); } } RP_SUB_Customer::get_instance();