Подписки WooCommerce – проверьте, есть ли у продукта активный абонент

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

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

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

благодаря

Эта пользовательская условная функция вернет 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 идентификатором продукта здесь, например, если идентификатор продукта равен 124):

 If ( has_an_active_subscriber( 124 ) ) //do something 

Вы можете использовать эту условную функцию, в частности, на шаблонах с add-to-cart (подписку) (которые вам придется скопировать из папки шаблонов плагинов подписки в папку шаблонов woocommerce активной темы …)

Весь код проверен и полностью работоспособен

Рекомендации:

  • Структура шаблона + Переопределение шаблонов через тему
  • Подписки разработчиков WooCommerce разрабатывают документы