导入 AKSRT 主题开发源码
This commit is contained in:
1 parent
9681dd3d48
commit
1268a55dd0
595 files changed
+127705
No files matched your search
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* AKSRT VIP Helper — VIP 会员展示辅助函数
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* 检查用户是否为 VIP
|
||||
*
|
||||
* 判定逻辑:
|
||||
* 1. VIP 功能未启用 → false
|
||||
* 2. 用户角色在 exempt_roles 白名单中 → true(管理员/编辑等特权角色)
|
||||
* 3. 用户有有效的 VIP 订单(status=completed 且未过期) → true
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return bool
|
||||
*/
|
||||
function aksrt_is_vip(int $user_id = 0): bool {
|
||||
if ($user_id <= 0) $user_id = get_current_user_id();
|
||||
if ($user_id <= 0) return false;
|
||||
|
||||
if (!class_exists('AKSRT_Settings')) return false;
|
||||
|
||||
$vip_settings = AKSRT_Settings::get_payment_vip_settings();
|
||||
if (empty($vip_settings['enabled'])) return false;
|
||||
|
||||
// 1. 角色豁免:VIP exempt_roles 中的角色直接视为 VIP
|
||||
$paid_settings = AKSRT_Settings::get_paid_content_settings();
|
||||
$exempt_roles = $paid_settings['vip_exempt_roles'] ?? [];
|
||||
if (!empty($exempt_roles)) {
|
||||
$user = get_userdata($user_id);
|
||||
if ($user && !empty(array_intersect($user->roles, $exempt_roles))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 订单判定:检查是否有有效的 VIP 订单
|
||||
if (class_exists('AKSRT_Order')) {
|
||||
$order_mgr = AKSRT_Order::get_instance();
|
||||
$valid_order = method_exists($order_mgr, 'get_valid_vip_order')
|
||||
? $order_mgr->get_valid_vip_order($user_id)
|
||||
: null;
|
||||
if ($valid_order) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 VIP 徽标文本
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function aksrt_get_vip_badge_text(): string {
|
||||
if (!class_exists('AKSRT_Settings')) return 'VIP';
|
||||
|
||||
$vip_settings = AKSRT_Settings::get_payment_vip_settings();
|
||||
return sanitize_text_field($vip_settings['badge_text'] ?? 'VIP');
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染 VIP 徽标 HTML
|
||||
*
|
||||
* @param int $user_id
|
||||
* @param string $size sm | md | lg
|
||||
* @return string
|
||||
*/
|
||||
function aksrt_render_vip_badge(int $user_id = 0, string $size = 'sm'): string {
|
||||
if (!aksrt_is_vip($user_id)) return '';
|
||||
|
||||
$badge_text = aksrt_get_vip_badge_text();
|
||||
$size_class = 'aksrt-vip-badge--' . $size;
|
||||
|
||||
return '<span class="aksrt-vip-badge aksrt-vip-badge--gold ' . esc_attr($size_class) . '"><i class="fas fa-crown"></i> ' . esc_html($badge_text) . '</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户 VIP 等级信息(用于展示)
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return array{is_vip: bool, badge_text: string, badge_html: string, name: string}
|
||||
*/
|
||||
function aksrt_get_vip_info(int $user_id = 0): array {
|
||||
$is_vip = aksrt_is_vip($user_id);
|
||||
$badge_text = aksrt_get_vip_badge_text();
|
||||
|
||||
return [
|
||||
'is_vip' => $is_vip,
|
||||
'badge_text' => $badge_text,
|
||||
'badge_html' => $is_vip ? aksrt_render_vip_badge($user_id) : '',
|
||||
'name' => $is_vip ? ($badge_text . '会员') : '普通用户',
|
||||
];
|
||||
}
|
||||
Reference in new issue
Block a user