fix(vip): Batch 0 wiring for VIP settings, URLs, and order meta

Wire get_vip_settings alias, tab aliases for vip/assets, expired-level meta,
VIP2 order-level fallback, JSON-safe order notes, and header/float pay-vip CTAs.
This commit is contained in:
kate522 committed 2026-07-21 16:16:43 +08:00
1 parent 01719b7fa1
commit 69836154fd
9 files changed
+122 -71

No files matched your search

+30 -9
View File
@@ -65,7 +65,8 @@ function aksrt_get_user_vip_level(int $user_id = 0): int {
if ($meta_level > 0) {
if ($expires > 0 && $expires < time()) {
// 过期:lazy 清 level,与 capabilities 读 meta 对齐。
// 过期: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 {
@@ -82,16 +83,36 @@ function aksrt_get_user_vip_level(int $user_id = 0): int {
: null;
if (is_array($valid_order) && !empty($valid_order)) {
$order_expires = trim((string) ($valid_order['expires_at'] ?? ''));
$order_expired = false;
if ($order_expires !== '') {
$ts = strtotime($order_expires);
if ($ts !== false && $ts < time()) {
$order_expired = true;
// Order.expires_at is payment checkout deadline, not VIP membership expiry.
// Prefer note/meta_payload level + aksrt_vip_expires if present.
$meta = [];
if (!empty($valid_order['meta_payload']) && is_array($valid_order['meta_payload'])) {
$meta = $valid_order['meta_payload'];
} elseif (!empty($valid_order['note']) && is_string($valid_order['note'])) {
$decoded = json_decode($valid_order['note'], true);
if (is_array($decoded)) {
$meta = $decoded;
}
}
if (!$order_expired) {
// 套餐无 level 列:有效 VIP 订单至少视为 VIP1。
$order_level = (int) ($meta['level'] ?? 0);
if ($order_level <= 0 && !empty($valid_order['product_id']) && class_exists('\AKSRT\Content\VipService')) {
// package_id encodes level: decode if possible via service helpers.
$pkg_id = (int) $valid_order['product_id'];
// Encode scheme: level * 1000 + index (see VipServicePackages).
if ($pkg_id >= 1000) {
$order_level = (int) floor($pkg_id / 1000);
} elseif ($pkg_id > 0) {
$order_level = 1;
}
}
$order_level = max(0, min(2, $order_level));
// Membership still valid if user meta expires is in future or permanent (0 with prior grant).
// Without restored meta, treat paid VIP order as at least the ordered level.
if ($order_level > 0) {
$candidate = $order_level;
} else {
$candidate = 1;
}
}