web-dev-qa-db-fra.com

Abonnements WooCommerce - Autoriser uniquement un abonnement actif pour un utilisateur

Je suis en train de créer un site basé sur l'adhésion/l'abonnement pour un de mes clients et ils utilisent les abonnements woocommerce ( https://woocommerce.com/products/woocommerce-subscriptions ). Maintenant, le problème est que le client construit quelques pages de promo qui permettent essentiellement à l'utilisateur d'acheter une mise à jour. Maintenant, c'est bon, mais le client souhaite qu'un client ne dispose que d'un seul abonnement (et associe un abonnement [ https://woocommerce.com/products/woocommerce-memberships/] ) à la fois.

La solution convenue est donc que, lors de l’achat de tout nouvel abonnement/produit, tous les autres abonnements soient annulés. Tous les membres associés supprimés/annulés et seul le dernier abonnement doit rester actif avec les membres qui les accompagnent.

J'ai donc essayé de construire cette solution, mais elle ne fonctionne tout simplement pas, alors tout conseil/direction serait la bienvenue!

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 );
        }
    }
}
1
Johan Rheeder

À moins que je ne vous comprenne mal, les abonnements WC disposent déjà de cette fonctionnalité.

Tout d'abord, définissez votre produit d'abonnement pour qu'il soit variable ou groupé, plutôt que d'avoir plusieurs produits individuels.

Définissez le produit de l'abonnement pour limiter les achats: https://docs.woocommerce.com/document/subscriptions/store-manager-guide/#limit-subscription

Activez ensuite autoriser le basculement: https://docs.woocommerce.com/document/subscriptions/switching-guide/#section-2

J'espère que cela pourra aider

3
Peter HvD

Je faisais face à ce problème et je vérifie si un utilisateur a un abonnement actif avant de pouvoir ajouter quelque chose au panier.

Il y a un hook appelé woocommerce_add_to_cart_validation.

Donc, vous pouvez ajouter un filtre sur cela comme ceci:

add_filter( 'woocommerce_add_to_cart_validation', 'check_subscriptions', 10, 2 );

et que vérifier si l'utilisateur a des abonnements actifs comme celui-ci:

$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;

J'ai écrit un petit article sur son blog qui est facile à lire pour les débutants: http://robinhenniges.com/woocommerce-subscription-allow-only-one-active-subscription/

1
Rob Anderson