В 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 в зависимости от текущей роли пользователя?
Спасибо.






Бесплатный плагин подписки YITH Woocommerce, похоже, закрыт и не разрешать настройки…
Для официального Плагин подписки Woocommerce используйте следующее:
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 вашей активной дочерней темы (или активной темы). Проверено, должно работать.
Спасибо, да, я использую этот плагин pt.wordpress.org/plugins/yith-woocommerce-подписка, я попробую
Есть ли проблема с использованием add_action( 'subscription_expired' вместо add_action( 'woocommerce_subscription_status_expired'?
Знаете ли вы какой-нибудь плагин WordPress, который позволяет узнать все доступные хуки на вашем сайте? или чтобы я мог видеть доступные хуки любого плагина?
@SteveKess Я посетил исходный код бесплатного плагина, и для него нет доступного хука действия… Таким образом, бесплатный плагин подписки YITH Woocommerce не может изменить роль пользователя с помощью хуков… Теперь официальный коммерческий плагин Woocommerce Subscriptions позволяет это.
Вы знаете, является ли официальный плагин подписки Woocommerce бесплатным?
@SteveKess Не существует бесплатного официального плагина подписки Woocommerce (только коммерческая версия, которая немного дороже, но надежна, открыта и настраиваема). Если этот ответ отвечает на ваш вопрос, пожалуйста, принимать ответ, спасибо.
Это может быть довольно сложно, раньше я изменял возможности пользователя только программно, но я знаю, что вам нужно будет подключиться к классу WP_User. Ознакомьтесь с обзором: usersinsights.com/wordpress-пользовательская-роль