【发布时间】:2018-07-04 08:23:38
【问题描述】:
我正在为我的客户建立一个基于会员/订阅的网站,我们正在使用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 );
【问题讨论】:
-
如果将订阅状态设置为过期怎么办?究竟是什么不工作?
-
@AndrewSchultz - 该代码不会取消任何其他订阅,因此用户最终会获得多个订阅。也不会抛出任何错误
-
这个函数附在什么钩子上?
-
@AndrewSchultz - woocommerce_thankyou
-
@JohanRheeder 是的,在您的代码中使用动作挂钩会更好。
标签: wordpress woocommerce woocommerce-subscriptions