Переключить роль пользователя по истечении срока подписки в Woocommerce - PullRequest
0 голосов
/ 19 марта 2019

В Woocommerce я использую плагин YITH WooCommerce и хочу изменить роль пользователя, когда срок действия подписки истечет.

Для этого я знаю, что должен использовать этот хук:

add_action( 'subscription_expired', 'my_function', 10, 2 );

function my_function( $user_id, $subscription_key ) {
    $sub= wcs_get_subscription_from_key( $subscription_key );
    // do something
}

Теперь у меня есть две базовые роли, agencia и talento, как я могу сделать это, когдасрок действия подписки истекает, она меняет роль пользователя с agencia_pro или agencia_pro_plus обратно на agencia и talento_pro или talento_pro_plus на talento?

Как создать функцию, которая проверяет пользователяролей и измените его на talento или agencia в зависимости от текущей роли пользователя?

Спасибо.

1 Ответ

0 голосов
/ 19 марта 2019

YITH Бесплатный плагин Woocommerce для подписки, похоже, закрыт и не позволяет настраивать

Для официального Плагин Woocommerce Subscription использовать следующее:

add_action( 'woocommerce_subscription_status_expired', 'change_user_role_on_subscription_expired', 10, 1 );
function change_user_role_on_subscription_expired( $subscription ) {
    // Get WP_User Object from subscription
    $user = new WP_User($subscription->get_user_id());

    if ( in_array('agencia_pro', $user->roles) ) {
        $user->remove_role( 'agencia_pro' );
        $user->add_role( 'agencia' );
    }
    elseif ( in_array('agencia_pro_plus', $user->roles) ) {
        $user->remove_role( 'agencia_pro_plus' );
        $user->add_role( 'agencia' );
    }
    elseif ( in_array('talento_pro', $user->roles) ) {
        $user->remove_role( 'talento_pro' );
        $user->add_role( 'talento' );
    }
    elseif ( in_array('talento_pro_plus', $user->roles) ) {
        $user->remove_role( 'talento_pro_plus' );
        $user->add_role( 'talento' );
    }
}

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

...