feat(users): add VIP sidebar entry
This commit is contained in:
1 parent
0fb5f18c73
commit
dafd0ad233
3 files changed
+60
-5
No files matched your search
@@ -23,11 +23,11 @@ Durable decisions that apply across all phases:
|
|||||||
|
|
||||||
### Done when
|
### Done when
|
||||||
|
|
||||||
- [ ] `inc/helpers/user-center-renderers/profile-sidebar.php` 在 `sidebar-stats.php` 后、`sidebar-commerce.php` 前加载独立的侧栏 VIP 入口渲染器。
|
- [x] `inc/helpers/user-center-renderers/profile-sidebar.php` 在 `sidebar-stats.php` 后、`sidebar-commerce.php` 前加载独立的侧栏 VIP 入口渲染器。
|
||||||
- [ ] 新的侧栏 VIP 入口渲染器复用现有 VIP 配置、会员等级、过期等级和到期状态,并在没有启用任何 VIP 等级时不输出 HTML。
|
- [x] 新的侧栏 VIP 入口渲染器复用现有 VIP 配置、会员等级、过期等级和到期状态,并在没有启用任何 VIP 等级时不输出 HTML。
|
||||||
- [ ] [agent:test-auditor] 人工检查渲染器的四种服务端输出:未开通显示权益引导;有效会员显示等级和既有状态文案;过期会员显示过期状态;VIP 未启用时无入口,并确认未引入新的精确日期格式。
|
- [x] [agent:test-auditor] 人工检查渲染器的四种服务端输出:未开通显示权益引导;有效会员显示等级和既有状态文案;过期会员显示过期状态;VIP 未启用时无入口,并确认未引入新的精确日期格式。
|
||||||
- [ ] 新入口的完整可点击区域使用 `aksrt_get_user_center_tab_url('vip')` 生成目标地址,人工检查所得 URL 可进入 `tab=vip`。
|
- [x] 新入口的完整可点击区域使用 `aksrt_get_user_center_tab_url('vip')` 生成目标地址,人工检查所得 URL 可进入 `tab=vip`。
|
||||||
- [ ] 运行 `php tools/audit-admin-contracts.php`,命令退出码为 0 且报告为 `errors=0`。
|
- [x] 运行 `php tools/audit-admin-contracts.php`,命令退出码为 0 且报告为 `errors=0`。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ $context = is_array($args['context'] ?? null) ? $args['context'] : [];
|
|||||||
extract($context, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
|
extract($context, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
|
||||||
|
|
||||||
require __DIR__ . '/sidebar-stats.php';
|
require __DIR__ . '/sidebar-stats.php';
|
||||||
|
require __DIR__ . '/sidebar-vip.php';
|
||||||
require __DIR__ . '/sidebar-commerce.php';
|
require __DIR__ . '/sidebar-commerce.php';
|
||||||
require __DIR__ . '/sidebar-creator.php';
|
require __DIR__ . '/sidebar-creator.php';
|
||||||
require __DIR__ . '/sidebar-nav.php';
|
require __DIR__ . '/sidebar-nav.php';
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* User center sidebar: VIP entry.
|
||||||
|
*
|
||||||
|
* @package AKSRT
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('ABSPATH') || exit;
|
||||||
|
|
||||||
|
$vip_settings = is_array($vip_settings ?? null) ? $vip_settings : [];
|
||||||
|
$vip_levels = is_array($vip_settings['levels'] ?? null) ? $vip_settings['levels'] : [];
|
||||||
|
$vip_enabled = !empty($vip_settings['enabled'])
|
||||||
|
&& (!empty($vip_levels[1]['enabled']) || !empty($vip_levels[2]['enabled']));
|
||||||
|
if (!$vip_enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user_id = (int) ($user_id ?? get_current_user_id());
|
||||||
|
$vip_level = function_exists('aksrt_get_user_vip_level') ? aksrt_get_user_vip_level($user_id) : 0;
|
||||||
|
$expired_level = (int) get_user_meta($user_id, 'aksrt_vip_level_expired', true);
|
||||||
|
$expires = (int) get_user_meta($user_id, 'aksrt_vip_expires', true);
|
||||||
|
$vip_url = aksrt_get_user_center_tab_url('vip');
|
||||||
|
|
||||||
|
$title = __('开通会员', 'aksrt');
|
||||||
|
$status = (string) ($vip_settings['desc'] ?? '');
|
||||||
|
if ($status === '') {
|
||||||
|
$status = __('尊享会员权益', 'aksrt');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($vip_level > 0) {
|
||||||
|
$title = (string) ($vip_levels[$vip_level]['name'] ?? ('VIP' . $vip_level));
|
||||||
|
if ($expires <= 0) {
|
||||||
|
$status = __('永久会员', 'aksrt');
|
||||||
|
} else {
|
||||||
|
$remaining_days = max(1, (int) ceil(($expires - time()) / DAY_IN_SECONDS));
|
||||||
|
$status = sprintf(
|
||||||
|
/* translators: %d: remaining membership days */
|
||||||
|
__('还有 %d 天到期', 'aksrt'),
|
||||||
|
$remaining_days
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} elseif ($expired_level > 0) {
|
||||||
|
$title = (string) ($vip_levels[$expired_level]['name'] ?? ('VIP' . $expired_level));
|
||||||
|
$status = __('已过期', 'aksrt');
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<a class="uc-sidebar-vip" href="<?php echo esc_url($vip_url); ?>">
|
||||||
|
<span class="uc-sidebar-vip__icon"><i class="fas fa-crown" aria-hidden="true"></i></span>
|
||||||
|
<span class="uc-sidebar-vip__content">
|
||||||
|
<strong><?php echo esc_html($title); ?></strong>
|
||||||
|
<small><?php echo esc_html($status); ?></small>
|
||||||
|
</span>
|
||||||
|
<i class="fas fa-angle-right uc-sidebar-vip__arrow" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
Reference in new issue
Block a user