Этот заказ условная функция будет возвращать true
если подписка на продукт уже активно используется абонентом.
function has_an_active_subscriber($product_id = null){
// Empty array to store ALL existing Subscription PRODUCTS
$products_arr = array();
$products_subscr = get_posts(array(
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => array('product', 'product_variation'),
'meta_key' => '_subscription_price',
));
foreach($products_subscr as $prod_subs) {
$products_arr[] = $prod_subs->ID;
}
// Testing if current product is a subscription product
if (in_array($product_id, $products_arr)){
// Declaring empties arrays
$subscribers_arr = array(); // ALL subscribers IDS
$active_subscriptions_arr = array(); // ALL actives subscriptions
$active_subscription_products_arr = array(); // ALL actif subscription products IDS IDS
$subscriber_subscriptions = array();
// Getting arrays of "active" IDS for subscribers, subscriptions orders and subscription products
$subscribers = get_users(array('role' => 'subscriber'));
foreach($subscribers as $subscriber) {
$subscriber_arr[] = $subscriber->ID;
$subscriptions = wcs_get_users_subscriptions($subscriber->ID);
foreach ($subscriptions as $key => $subscription){
$subscription_status = $subscription->post->post_status;
if ($subscription_status == 'wc-active') { // active subscriptions only
$subscription_id = $subscription->post->ID;
$order_id = $subscription->order->post->ID; // order ID (corresponding to the subscription ID)
$active_subscriptions_arr[] = $subscription->post->ID;
$order_items = $subscription->order->get_items();
// Getting all the products in the Order
foreach ($order_items as $item) {
// $item_id = $item[product_id];
// Avoiding to add existing products in the array
if(!in_array($product_id, $active_subscription_products_arr))
$active_subscription_products_arr[] = $item[product_id];
}
}
}
}
}
if (in_array($product_id, $active_subscription_products_arr)) return true;
else return false;
}
Этот код идет на function.php вашего активного ребенка тема (или темы), или же на любом файле плагина.
Я просто здесь wcs_get_users_subscriptions()
родной функции подписки используются, чтобы получить подписки для определенного идентификатора пользователя, в моем коде.
ИСПОЛЬЗОВАНИЕ(для определенных переменных $ product_id)
If (has_an_active_subscriber($product->id)) { // or $product_id
// This product is already used by an active subscriber
// DO SOMETHING HERE
} else {
// This product is NOT used
// DO SOMETHING HERE
}
Вы также можете заменить $product_id
на продукт ID здесь, например, если идентификатор продукта 124) :
If (has_an_active_subscriber(124)) //do something
Вы можете использовать эту условную функцию в частности, на add-to-cart
(подписка) шаблонов (которые вы должны скопировать из папки шаблонов подписки плагин для вашего активного theme's woocommerce template folder ...)
Всего код тестируются и полностью функциональные
Ссылки:
Любая помощь пожалуйста. – user3814097