5

Tôi đang sử dụng một plugin "WooCommerce Đăng ký" và tôi muốn kiểm tra xem sản phẩm đã có người đăng ký hoạt động trong hệ thốngWooCommerce Đăng ký - Kiểm tra xem sản phẩm đã có một thuê bao hoạt động

tôi chỉ muốn 1 thuê bao cho mỗi sản phẩm . Có một bộ lọc để kiểm tra nhưng tôi không biết cách sử dụng nó:
https://docs.woocommerce.com/document/subscriptions/develop/filter-reference/

Làm cách nào để sử dụng chức năng hoặc móc đó để đạt được điều này?

Cảm ơn

+0

Bất kỳ trợ giúp vui lòng. – user3814097

Trả lời

4

chức năng có điều kiện tùy chỉnh thực hiện này sẽ trở lại true nếu một sản phẩm thuê bao đã được tích cực sử dụng bởi một thuê bao.

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; 
} 

Mã này đi trên function.php chủ đề con đang hoạt động (hoặc chủ đề) hoặc trên bất kỳ tệp plugin nào.

Tôi vừa sử dụng ở đây wcs_get_users_subscriptions() chức năng đăng ký gốc, để nhận đăng ký cho ID người dùng được xác định, trong mã của tôi.


SỬ DỤNG(đối với một biến product_id $ được xác định)

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 
} 

Bạn cũng có thể thay thế $product_id bởi một ID sản phẩm ở đây ví dụ nếu ID của sản phẩm là 124) :

If (has_an_active_subscriber(124)) //do something 

Bạn có thể sử dụng chức năng có điều kiện này đặc biệt, trên add-to-cart(đăng ký) mẫu (mà bạn sẽ phải sao chép từ thư mục thuê bao Plugin mẫu để hoạt động theme's woocommerce template folder của bạn ...)

Tất cả các mã được kiểm tra và đầy đủ chức năng

Tài liệu tham khảo:

+0

Cảm ơn bạn rất nhiều người đàn ông !!!! Điều này hoàn toàn phù hợp với tôi !!! – user3814097

Các vấn đề liên quan