5

Я использую плагин «WooCommerce подписку», и я хочу, чтобы проверить, если продукт уже имеет активный абонент в системеWooCommerce Подписка - Проверьте, если продукт уже имеет активный подписчик

Я хочу только 1 абонента для каждого продукта , Для проверки есть фильтр, но я не знаю, как его использовать:
https://docs.woocommerce.com/document/subscriptions/develop/filter-reference/

Как я могу использовать эти функции или крючки для достижения этого?

Благодаря

+0

Любая помощь пожалуйста. – user3814097

ответ

4

Этот заказ условная функция будет возвращать 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 ...)

Всего код тестируются и полностью функциональные

Ссылки:

+0

Спасибо, много человек !!!! Это абсолютно для меня! – user3814097

Смежные вопросы