fix(vip): preserve layered membership expirations
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ba5638a892
commit
9aa0f1aefa
4 files changed
+43
-11
No files matched your search
@@ -65,10 +65,20 @@ function aksrt_get_user_vip_level(int $user_id = 0): int {
|
||||
|
||||
if ($meta_level > 0) {
|
||||
if ($expires > 0 && $expires < time()) {
|
||||
// 过期:lazy 清 level,记录上次等级(zibll vip_level_expired)。
|
||||
update_user_meta($user_id, 'aksrt_vip_level_expired', min(2, max(1, $meta_level)));
|
||||
update_user_meta($user_id, 'aksrt_vip_level', 0);
|
||||
$candidate = 0;
|
||||
$base_level = (int) get_user_meta($user_id, 'aksrt_vip_base_level', true);
|
||||
$base_expires = (int) get_user_meta($user_id, 'aksrt_vip_base_expires', true);
|
||||
if ($base_level > 0) {
|
||||
update_user_meta($user_id, 'aksrt_vip_level', $base_level);
|
||||
update_user_meta($user_id, 'aksrt_vip_expires', $base_expires);
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_level');
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_expires');
|
||||
$candidate = min(2, max(0, $base_level));
|
||||
} else {
|
||||
// 过期:lazy 清 level,记录上次等级(zibll vip_level_expired)。
|
||||
update_user_meta($user_id, 'aksrt_vip_level_expired', min(2, max(1, $meta_level)));
|
||||
update_user_meta($user_id, 'aksrt_vip_level', 0);
|
||||
$candidate = 0;
|
||||
}
|
||||
} else {
|
||||
// expires === 0 视为永久;expires >= now 视为有效。
|
||||
$candidate = min(2, max(0, $meta_level));
|
||||
|
||||
@@ -30,6 +30,8 @@ if (class_exists('\\AKSRT\\Content\\VipService')) {
|
||||
$currency_name = (string) ($vip_catalog['currency_name'] ?? $currency_name);
|
||||
}
|
||||
$expires = (int) get_user_meta($user_id, 'aksrt_vip_expires', true);
|
||||
$base_level = (int) get_user_meta($user_id, 'aksrt_vip_base_level', true);
|
||||
$base_expires = (int) get_user_meta($user_id, 'aksrt_vip_base_expires', true);
|
||||
$expired_level = (int) get_user_meta($user_id, 'aksrt_vip_level_expired', true);
|
||||
$levels = is_array($vip_settings['levels'] ?? null) ? $vip_settings['levels'] : [];
|
||||
$desc_top = (string) ($vip_settings['desc'] ?? '');
|
||||
@@ -62,7 +64,14 @@ if ($level > 0) {
|
||||
$vip_state = 'active';
|
||||
$vip_state_label = __('生效中', 'aksrt');
|
||||
$vip_expiry_text = sprintf(__('到期时间:%s', 'aksrt'), wp_date('Y年m月d日', $expires));
|
||||
$btn_type = 'renew_' . $level;
|
||||
if ($base_level > 0 && $base_level < $level) {
|
||||
$base_name = (string) ($levels[$base_level]['name'] ?? ('VIP' . $base_level));
|
||||
$base_expiry_text = $base_expires > 0
|
||||
? wp_date('Y年m月d日', $base_expires)
|
||||
: __('永久', 'aksrt');
|
||||
$vip_expiry_text .= ';' . sprintf(__('%s:%s', 'aksrt'), $base_name, $base_expiry_text);
|
||||
}
|
||||
$btn_type = 'renew_' . $level;
|
||||
}
|
||||
} elseif ($expired_level > 0) {
|
||||
$vip_state = 'expired';
|
||||
|
||||
Reference in new issue
Block a user