' . esc_html__('会员功能未启用。', 'aksrt') . ''; return; } $user_id = (int) ($user_id ?? get_current_user_id()); $level = function_exists('aksrt_get_user_vip_level') ? aksrt_get_user_vip_level($user_id) : 0; $expires = (int) get_user_meta($user_id, 'aksrt_vip_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'] ?? ''); $user = get_userdata($user_id); $display = $user ? $user->display_name : ''; $user_bio = $user ? trim((string) $user->description) : ''; if ($user_bio === '') { $user_bio = __('这家伙很懒,什么都没有写…', 'aksrt'); } // Avatar: zibll avatar-img avatar-md (55px fixed box). $avatar = get_avatar($user_id, 110, '', $display, ['class' => 'avatar']); // Name row with identity chips (zibll zib_get_user_name parity). $name_html = ''; if (function_exists('aksrt_get_user_name')) { $name_html = aksrt_get_user_name([ 'id' => $user_id, 'class' => 'flex1 flex ac', 'vip' => true, 'follow' => false, ]); } if ($name_html === '') { $name_html = esc_html($display); if (function_exists('aksrt_render_user_identity_chips')) { $name_html .= aksrt_render_user_identity_chips($user_id, 'card'); } } // Status column (zibll my_vip_box). $status_html = ''; $btn_type = 'pay'; if ($level > 0) { $lv_name = (string) ($levels[$level]['name'] ?? ('VIP' . $level)); $lv_desc = (string) ($levels[$level]['desc'] ?? ''); if ($expires <= 0) { $badge = '' . esc_html__('永久会员', 'aksrt') . ''; if ($level < 2) { $btn_type = 'upgrade'; } } else { $badge = '' . esc_html(sprintf(__('到期时间:%s', 'aksrt'), wp_date('Y年m月d日', $expires))) . ''; $btn_type = 'renew_' . $level; } $status_html = '
' . '
' . esc_html__('我的会员', 'aksrt') . '
' . '
' . '
' . esc_html($lv_name) . '
' . $badge . '
' . '
' . esc_html($lv_desc !== '' ? $lv_desc : __('尊享专属特权', 'aksrt')) . '
' . '
'; } elseif ($expired_level > 0) { $exp_label = $expires > 0 ? sprintf(__('过期时间:%s', 'aksrt'), wp_date('Y年m月d日', $expires)) : __('已过期', 'aksrt'); $status_html = '
' . '
' . esc_html__('当前会员状态', 'aksrt') . '
' . '
' . '
' . esc_html__('已过期', 'aksrt') . '
' . '
' . esc_html($exp_label) . '
' . '
' . ($desc_top !== '' ? '
' . esc_html($desc_top) . '
' : '') . '
'; $btn_type = 'pay'; } else { // Never opened VIP — zibll: 当前会员状态 / 未开通会员 / desc. $status_html = '
' . '
' . esc_html__('当前会员状态', 'aksrt') . '
' . '
' . '
' . esc_html__('未开通会员', 'aksrt') . '
' . '
' . '
' . esc_html($desc_top !== '' ? $desc_top : __('开通会员,尊享专属特权', 'aksrt')) . '
' . '
'; $btn_type = 'pay'; } // Left user box (zibll user_box). $user_box = '
' . '
' . $avatar . '
' . '
' . '
' . $name_html . '
' . '
' . esc_html($user_bio) . '
' . '
' . '
'; // Level cards. $cards = ''; foreach ([1, 2] as $lv) { if (empty($levels[$lv]['enabled'])) { continue; } $lv_name = (string) ($levels[$lv]['name'] ?? ('VIP' . $lv)); $lv_desc = (string) ($levels[$lv]['desc'] ?? ''); // Preserve admin equity HTML as-is (sanitize/wrap only; never re-split into items). $equity_raw = (string) ($levels[$lv]['equity'] ?? ''); $equity = function_exists('aksrt_format_vip_equity_html') ? aksrt_format_vip_equity_html($equity_raw) : ''; $cta = sprintf(__('开通%s', 'aksrt'), $lv_name); $vip_attr = $lv; if (str_starts_with($btn_type, 'renew_')) { $renew_lv = (int) substr($btn_type, 6); if ($lv === $renew_lv) { $cta = sprintf(__('续费%s', 'aksrt'), $lv_name); } elseif ($lv > $renew_lv) { $cta = sprintf(__('升级%s', 'aksrt'), $lv_name); } else { continue; } } elseif ($btn_type === 'upgrade') { if ($lv <= $level) { continue; } $cta = sprintf(__('升级%s', 'aksrt'), $lv_name); $vip_attr = 2; } elseif ($level > 0 && $lv < $level) { continue; } elseif ($level > 0 && $lv === $level) { $cta = sprintf(__('续费%s', 'aksrt'), $lv_name); } $cards .= '
'; // Decorative gem: do NOT use .abs-center (that utility is full-width header/search placement). $cards .= ''; $cards .= '
'; $cards .= '
'; $cards .= '
'; $cards .= '
' . esc_html($lv_name) . '
'; if ($lv_desc !== '') { $cards .= '
' . esc_html($lv_desc) . '
'; } $cards .= '
'; $cards .= $equity; $cards .= '' . '' . esc_html($cta) . '' . ' '; $cards .= '
'; } // Points exchange (non-VIP only). $points_html = ''; if ($level <= 0 && !empty($vip_settings['points_exchange']['enabled'])) { $points_html = ''; } ?>