WooCommerce 订阅 - 检查产品是不是已有活跃订阅者
Posted
技术标签:
【中文标题】WooCommerce 订阅 - 检查产品是不是已有活跃订阅者【英文标题】:WooCommerce Subscriptions - Check if product already has an active subscriberWooCommerce 订阅 - 检查产品是否已有活跃订阅者 【发布时间】:2016-12-29 22:31:28 【问题描述】:我正在使用插件“WooCommerce 订阅”,我想检查产品是否在系统中已经有活跃订阅者
我只希望每个产品有 1 个订阅者。有一个过滤器可以检查它,但我不知道如何使用它:https://docs.woocommerce.com/document/subscriptions/develop/filter-reference/
我如何使用这些函数或钩子来实现这一点?
谢谢
【问题讨论】:
【参考方案1】:如果订阅产品已被订阅者积极使用,此自定义条件函数将返回 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()
原生订阅功能,在我的代码中获取已定义用户 ID 的订阅。
USAGE (对于已定义的 $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,例如,如果产品 ID 为 124):If ( has_an_active_subscriber( 124 ) ) //do something
您可以使用此条件函数,尤其是在
add-to-cart
(订阅) 模板(您必须从订阅中复制插件模板文件夹到您的活动theme's woocommerce template folder...)
所有代码都经过测试且功能齐全
参考文献:
Template Structure + Overriding Templates via a Theme WooCommerce Subscriptions developper docs【讨论】:
以上是关于WooCommerce 订阅 - 检查产品是不是已有活跃订阅者的主要内容,如果未能解决你的问题,请参考以下文章