Определение наличия активной подписки у текущего пользователя


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

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

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

Спасибо.

Author: LoicTheAztec, 2017-02-23

2 answers

Здесь представлена пользовательская условная функция с необязательным аргументом $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
Author: LoicTheAztec, 2017-08-22 13:22:32

Использовать wcs_user_has_subscription()

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

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

Для получения более подробной информации Проверьте, есть ли у пользователя активная подписка.

 1
Author: phpsmashcode, 2017-12-16 20:16:30