我正在为我的客户端构建一个基于成员/订阅的站点,他们正在使用woocommerce订阅(https://woocommerce.com/products/woocommerce-subscriptions)。现在的问题是,客户端正在构建一些基本允许用户购买升级的宣传页面。现在,这是很好的,但是客户端只希望客户在任何时候只有一个订阅(并关联成员资格[https://woocommerce.com/products/woocommerce-memberships/])。
因此,商定的解决方案是,在购买任何新的订阅/产品时,所有其他订阅都应取消。所有相关成员被删除/取消,并且只有最新的订阅应该与其伴随的成员一起保持活动状态。
因此,我已经尝试建立这个解决方案,但它只是不起作用,所以任何建议/方向将是最欢迎的!
function wp56908_new_order_housekeeping ($order_id)
{
$args = array(
'subscriptions_per_page' => -1,
'customer_id' => get_current_user_id(),
);
$subscriptions = wcs_get_subscriptions($args);
foreach ($subscriptions as $subscription) {
$s_order_id = method_exists( $subscription, 'get_parent_id' ) ? $subscription->get_parent_id() : $subscription->order->id;
if ($s_order_id != $order_id) {
$cancel_note = 'Customer purchased new subscription in order #' . $order_id;
$subscription->update_status( 'cancelled', $cancel_note );
}
}
}发布于 2018-01-26 13:10:02
除非我误解了您的意思,否则WC订阅已经具有此功能。
首先,将您的订阅产品设置为可变或分组,而不是有多个单独的产品。
将订阅产品设置为限制购买:https://docs.woocommerce.com/document/subscriptions/store-manager-guide/#limit-subscription
然后打开允许切换:https://docs.woocommerce.com/document/subscriptions/switching-guide/#section-2
希望这有帮助
发布于 2018-07-06 16:00:48
我正面临这个问题,我检查一个用户是否有一个活动的订阅之前,他可以把什么东西到手推车。
有一个叫做woocommerce_add_to_cart_validation的钩子。
所以您可以在这样的情况下添加一个过滤器:
add_filter( 'woocommerce_add_to_cart_validation', 'check_subscriptions', 10, 2 );
而不是检查用户是否有如下所示的活动订阅:
$user_id = get_current_user_id();
$active_subscriptions = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => 'shop_subscription',
'post_status' => 'wc-active',
) );
if(!empty($active_subscriptions)) return true;
else return false;我写了一篇关于他的博客文章,对初学者来说很容易阅读:https://robinhenniges.com/woocommerce-subscription-allow-only-one-active-subscription/
https://wordpress.stackexchange.com/questions/292149
复制相似问题