feat(pay): VIP package purchase service and user-center open flow
Add AKSRT_Vip_Service (GET/POST /pay/vip), activate aksrt_vip_level/expires on order paid, package UI in credits panel, and deep-link VIP CTA to credits tab.
This commit is contained in:
@@ -333,18 +333,58 @@ function aksrt_render_vip_badge(int $user_id = 0, string $size = 'sm'): string {
|
||||
* 获取用户 VIP 等级信息(用于展示)
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return array{is_vip: bool, level: int, badge_text: string, badge_html: string, name: string}
|
||||
* @return array{is_vip: bool, level: int, badge_text: string, badge_html: string, name: string, expires: int, expires_label: string}
|
||||
*/
|
||||
function aksrt_get_vip_info(int $user_id = 0): array {
|
||||
$level = aksrt_get_user_vip_level($user_id);
|
||||
$is_vip = $level >= 1;
|
||||
$badge_text = aksrt_get_vip_badge_text();
|
||||
$expires = $user_id > 0 ? (int) get_user_meta($user_id, 'aksrt_vip_expires', true) : 0;
|
||||
$expires_label = __('未开通', 'aksrt');
|
||||
if ($level > 0) {
|
||||
if ($expires <= 0) {
|
||||
$expires_label = __('永久有效', 'aksrt');
|
||||
} elseif ($expires < time()) {
|
||||
$expires_label = __('已过期', 'aksrt');
|
||||
} else {
|
||||
$expires_label = sprintf(
|
||||
/* translators: %s: date */
|
||||
__('到期时间:%s', 'aksrt'),
|
||||
wp_date('Y-m-d H:i', $expires)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$name = __('普通用户', 'aksrt');
|
||||
if ($is_vip && class_exists('AKSRT_Settings')) {
|
||||
$vip = AKSRT_Settings::get_payment_vip_settings();
|
||||
$name = (string) ($vip['levels'][$level]['name'] ?? ($badge_text . __('会员', 'aksrt')));
|
||||
} elseif ($is_vip) {
|
||||
$name = $badge_text . __('会员', 'aksrt');
|
||||
}
|
||||
|
||||
return [
|
||||
'is_vip' => $is_vip,
|
||||
'level' => $level,
|
||||
'badge_text' => $badge_text,
|
||||
'badge_html' => $is_vip ? aksrt_render_vip_badge($user_id) : '',
|
||||
'name' => $is_vip ? ($badge_text . '会员') : '普通用户',
|
||||
'is_vip' => $is_vip,
|
||||
'level' => $level,
|
||||
'badge_text' => $badge_text,
|
||||
'badge_html' => $is_vip ? aksrt_render_vip_badge($user_id) : '',
|
||||
'name' => $name,
|
||||
'expires' => $expires,
|
||||
'expires_label' => $expires_label,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* VIP 开通页入口(用户中心 credits 面板)。
|
||||
*/
|
||||
if (!function_exists('aksrt_get_vip_purchase_url')) {
|
||||
function aksrt_get_vip_purchase_url(): string {
|
||||
if (function_exists('aksrt_get_user_center_tab_url')) {
|
||||
return aksrt_get_user_center_tab_url('credits');
|
||||
}
|
||||
if (function_exists('aksrt_get_user_center_url')) {
|
||||
return aksrt_get_user_center_url();
|
||||
}
|
||||
return home_url('/');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user