作为cron作业的替代,您可以使用“及时”删除角色。
i、 e.当用户登录时,您可以检查其是否具有要过期的角色,将当前日期与下载日期核对,并相应地更新用户。
这假设您能够获取(至少)用户最后一次下载的日期或时间戳。
我不熟悉EDD,但这是一个概念代码教授:
add_action( \'wp_login\', function($username, $user) {
$toExpire = [ \'buyer\', \'other_role\' ];
$toRemove = array_intersect($user->roles, $toExpire);
if (count($user->roles) < 2 || empty($toRemove)) {
// nothing to do if the user has just 1 role or none of the roles you want to expire
return;
}
// the function below does NOT exists
// I think in EDD you should be able to get the date or timestamp of an user last download
$downloadTimestamp = get_last_download_timestamp_for_user($user->ID);
$dayLimit = 30 * DAY_IN_SECONDS; // expire after 30 days
if ((time() - $dayLimit) < $paymentTimestamp) {
// do nothing if not enough time passed
return;
}
if (! array_diff($toExpire, $toRemove)) {
// if an user has ONLY roles that might expire, keep the first role
array_shift($toRemove);
}
// remove expired roles
foreach($toRemove as $role) {
$user->remove_role($role);
}
}, 1, 2);
这样做不需要设置cron作业,而且更容易实现。
但是,使用此方法,您可能会在系统中看到具有“过期”角色的用户,因为他们在角色过期后没有登录。如果您有(或想要)这方面的统计数据,您需要将其考虑在内。