Обнаружение, если текущий пользователь имеет активную подписку

Я занимаюсь разработкой сайта на WordPress с WooCommerce. Я использую дополнительно WC Платные Списки а также WooCommerce Подписки плагины для управления моей работой.

Проблема заключается в том, что пользователь с ролью «подписчик» с активной подпиской входит в систему и пытается публиковать контент каждый раз, когда ему / ей приходится выбирать пакет, даже если у него есть активная подписка.

Есть ли кто-нибудь с идеей о том, как определить, есть ли у пользователя активная подписка, если он возвращает true, то шаг выбора пакета пропущен?

Благодарю.

5

Решение

Вот пользовательская условная функция с необязательным аргументом $ user_id (определенный user_id).

Эта условная функция вернет true если текущий пользователь (или определенный пользователь) имеет активные подписки:

function has_active_subscription( $user_id=null ) {

// if the user_id is not set in function argument we get the current user ID
if( null == $user_id )
$user_id = get_current_user_id();

// Get all active subscrptions for a user ID
$active_subscriptions = get_posts( array(
'numberposts' => -1,
'meta_key'    => '_customer_user',
'meta_value'  => $user_id,
'post_type'   => 'shop_subscription', // Subscription post type
'post_status' => 'wc-active', // Active subscription

) );
// if
if(!empty($active_subscriptions)) return true;
else return false;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.


Обновление использования:

1) ИСПОЛЬЗОВАНИЕ для текущего пользователя:

if( has_active_subscription() ){ // Current user has an active subscription
// do something … here goes your code

// Example of displaying something
echo '<p>I have active subscription</p>';
}

2) ИСПОЛЬЗОВАНИЕ для определенного идентификатора пользователя:

if( has_active_subscription(26) ){ // Defined User ID has an active subscription
// do something … here goes your code

// Example of displaying something
echo '<p>User ID "26" have an active subscription</p>';
}

Этот код проверен и работает


Связанные ответы:

4

Другие решения

использование wcs_user_has_subscription()

$has_sub = wcs_user_has_subscription( '', '', 'active' );

if ( $has_sub) {
// User have active subscription
}

Больше подробностей, Проверьте, есть ли у пользователя активная подписка.

3

По вопросам рекламы [email protected]