私は私のクライアントのためにメンバーシップ/サブスクリプションベースのサイトを構築中です。彼らはwoocommerceサブスクリプションを使用しています( https://woocommerce.com/products/woocommerce-subscriptions )。問題は、クライアントが基本的にユーザーがアップグレードを購入できるようにするいくつかのプロモーションページを作成していることです。これで問題ありませんが、クライアントは一度に1つのサブスクリプション(および関連するメンバーシップ[ 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 );
}
}
}
誤解がない限り、WCサブスクリプションには既にこの機能があります。
まず、サブスクリプション製品を複数の個別製品ではなく、可変またはグループ化するように設定します。
サブスクリプション製品を設定して購入を制限します。 https://docs.woocommerce.com/document/subscriptions/store-manager-guide/#limit-subscription
次に、切り替えの許可を有効にします。 https://docs.woocommerce.com/document/subscriptions/switching-guide/#section-2
役立つことを願っています
私はこの問題に直面していたので、カートに何かを入れる前にユーザーがアクティブなサブスクリプションを持っているかどうかを確認します。
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;
私は彼について初心者向けの読みやすい小さなブログ記事を書きました: http://robinhenniges.com/woocommerce-subscription-allow-only-one-active-subscription/