Членство в Woocommerce Ограничение количества участников до одного - PullRequest
0 голосов
/ 30 марта 2020

У меня есть сайт Wordpress Memberships, созданный на основе WooCommerce с плагином WooCommerce-Memberships.

Сценарий:

 - Membership Plan = Gold-Plan-Membership / 1-month

 - simple Product = Gold-Product-Membership / €10,00

Когда покупатель приобретает продукт "Gold-Product-Membership" »активирует подписку« Gold-Plan-Membership »на 1 месяц. и пока все хорошо.

Я хочу ограничить участников только одним активным членством одновременно. То, что я хочу сделать, это заблокировать создание любого нового членства от покупки, если любое другое членство активно.

Сейчас. Следующий код проверяет активные планы членства клиентов и их статус («активный», «бесплатный», «ожидающий», «бесплатный_прибор»), а также членство не создает нового членства пользователя для этого заказа. Следующий код проверит все статусы участников, которые имеют доступ к ограниченному контенту.

Но проверяйте только план членства, а не покупку его продукта.

Я объясню. Клиент покупает продукт "Gold-Product-Membership", завершает процедуру оформления заказа и фактически выполняет платеж, заказ на этот продукт обрабатывается. Хотя на самом деле "Gold-Plan-Membership" не активирован.

Понятно, что это проблема.

Я ищу решение, которое работает на продукте, но в то же время интегрируется с его связь со статусом плана членства.

  • Я хочу ограничить участников только одним активным членством за один раз.

Заранее спасибо

Код

/**
 * There are two ways we could prevent purchasing more than one membership:
 *  1. prevent access if the customer already has an active membership
 *  2. prevent access if the customer already has any membership
 *
 * This snippet shows the second scenario.
 */


/**
 * Do not grant membership access to purchasers if they already hold any membership, regardless of status
 *
 * @param bool $grant_access true if the purchaser should get memberships access from this order
 * @param array $args {
 *  @type int $user_id purchaser's WordPress user ID
 *  @type int $product_id the ID of the access-granting product
 *  @type int $order_id the ID of order for this purchase
 * }
 * @return bool $grant_access
 */

function sv_wc_memberships_limit_to_one_membership( $grant_access, $args ) {

    // get all active memberships for the purchaser, regardless of status
    $memberships = wc_memberships_get_user_memberships( $args['user_id'] );

    // if there are any memberships returned, do not grant access from purchase
    if ( ! empty( $memberships ) ) {
        return false;
    }

    return $grant_access;
}
add_filter( 'wc_memberships_grant_access_from_new_purchase', 'sv_wc_memberships_limit_to_one_membership', 1, 2 );
...