У меня есть сайт 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 );