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:
1 parent
01719b7fa1
commit
69836154fd
9 files changed
+122
-71
No files matched your search
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user