Функция WP scheduled изменяет User Role WooCommerce после оплаты подписки на месяц или год… Как доработать функцию change_role PHP?

Как доработать функцию WP PHP для автоматической смены роли по подписке на CMS WordPress?

Имеется функция, которая изменяет роль после оплаты конкретного товара WooCommerce.

add_action( 'woocommerce_order_status_completed', 'change_role_on_vip' );
function change_role_on_vip( $order_id ) {
	$order = wc_get_order( $order_id );
	$items = $order->get_items();

	$products_to_check = array( '3420' ); // id товара WooCommerce

	foreach ( $items as $item ) {
		if ( $order->user_id > 0 && in_array( $item['product_id'], $products_to_check ) ) {
		 $user = new WP_User( $order->user_id );

		 // заменить роль
		 $user->remove_role( 'lead' );
		 $user->add_role( 'vip' );

			// окончание цикла
			break;
	 }
	}
}

Как дополнить функцию PHP условием: оплата по подписке.

Сценарий

Например, оплатил 15-го числа текущего месяца и ему включается роль vip на месяц или год в зависимости от id товара.

По истечении времени, автоматически сбрасывается на роль: lead.

Промежуток времени задается не числом (30 дней, 365 дней), а именно датой оплаты и подписка должна продлеваться от даты до даты. Например, и в феврале (28 дней) и в мае (31 день) одинаково продлевается 15-го числа.

Условие: подписка должна продлеваться в день текущей оплаты. То есть, истек срок на 15-е, повисел в роли: lead и продлил 25-го. Новый цикл начался с 25-го по 25-е.


Подсказка (найдена в интернете).

if ( ! wp_next_scheduled( 'alter_user_role_hook' ) ) {
  wp_schedule_event( strtotime('tomorrow'), 'daily', 'alter_user_role_hook' );
}
function alter_user_role_function() {
  global $wpdb;
  $today = date('Y-m-d H:i:s',strtotime('today'));
  $expired = $wdpb->get_col("SELECT user_id FROM {$wpdb->usermeta} WHERE expired_key <> $uid,
		  'role' => 'havent_paid'
		)
	  );
	}
  }
}
add_action( 'alter_user_role_hook', 'alter_user_role_function' );

Как связать два предложенных кода в один? Или создать доработать любой из них.