我正在为我的客户构建基于会员/订阅的网站,我们正在使用Woocommerce Subscriptions和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 );
}
}
}
add_action( 'woocommerce_thankyou', 'wp56908_new_order_housekeeping', 10, 1 );
答案 0 :(得分:0)
这是我从WooCommerce获得的有关函数wcs_get_subscriptions()
问题的支持电子邮件。
感谢您与我们联系并向我们报告此问题!
我已经在本地安装中尝试过,我确认这似乎是一个 错误!我已经向我们的开发团队和补丁报告过了 应该包含在下一次更新中。到现在为止,如果你真的很匆忙 并希望让它工作,你可以搜索这个代码(在 wcs-functions.php第483行:
//我们需要限制对包含某些内容的订阅 产品/变异if((0!= $ args [' product_id']&& is_numeric( $ args [' product_id']))|| (0!= $ args [' variation_id']&& is_numeric( $ args [' variation_id']))){$ query_args [' post__in'] = wcs_get_subscriptions_for_product(array($ args [' product_id'], $ args [' variation_id'])); }
并将其替换为:
//我们需要限制对包含某些内容的订阅 产品/变异if((0!= $ args [' product_id']&& is_numeric( $ args [' product_id']))|| (0!= $ args [' variation_id']&& is_numeric( $ args [' variation_id']))){$ prod_args = array($ args [' product_id'], $ args [' variation_id']); $ prod_args = array_filter($ prod_args, function($ prod_args){return($ prod_args!== 0); }); $ query_args [' post__in'] = wcs_get_subscriptions_for_product( $ prod_args); }
请注意,这不是理想的解决方案,因为您将会这样做 直接修改我们的插件代码,这些更改可能会丢失 更新后,但如果您对代码感到满意并想要采取 作为临时解决方法的风险,直到我们添加适当的补丁 我们的插件,你可以做到。 ;)
如果您需要任何帮助,请告诉我们!
谢谢,Bernat