feat(users): add native VIP management
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ defined('ABSPATH') || exit;
|
||||
class UsersMenus {
|
||||
|
||||
use UsersMenusVerify;
|
||||
use UsersMenusVip;
|
||||
|
||||
public const CAPABILITY = 'manage_options';
|
||||
|
||||
@@ -38,6 +39,7 @@ class UsersMenus {
|
||||
add_action('admin_post_aksrt_users_process_appeal', [$this, 'handle_process_appeal']);
|
||||
add_action('admin_post_aksrt_users_batch_invite_codes', [$this, 'handle_batch_invite_codes']);
|
||||
add_action('admin_post_aksrt_users_disable_invite_code', [$this, 'handle_disable_invite_code']);
|
||||
add_action('admin_post_aksrt_users_mutate_vip', [$this, 'handle_mutate_vip']);
|
||||
}
|
||||
|
||||
public function register_menus(): void {
|
||||
@@ -61,6 +63,14 @@ class UsersMenus {
|
||||
'aksrt_invite_codes',
|
||||
[$this, 'render_invite_codes_page']
|
||||
);
|
||||
add_submenu_page(
|
||||
'users.php',
|
||||
__('用户会员', 'aksrt'),
|
||||
__('用户会员', 'aksrt'),
|
||||
self::CAPABILITY,
|
||||
'aksrt_user_vip',
|
||||
[$this, 'render_vip_page']
|
||||
);
|
||||
add_submenu_page(
|
||||
'users.php',
|
||||
__('身份认证', 'aksrt'),
|
||||
@@ -158,6 +168,9 @@ class UsersMenus {
|
||||
'invite_batch_failed' => __('邀请码批量生成失败。', 'aksrt'),
|
||||
'invite_disabled' => __('邀请码已禁用。', 'aksrt'),
|
||||
'invite_failed' => __('邀请码操作失败。', 'aksrt'),
|
||||
'vip_updated' => __('会员状态已更新。', 'aksrt'),
|
||||
'vip_partial' => __('部分用户的会员状态已更新。', 'aksrt'),
|
||||
'vip_failed' => __('会员操作失败。', 'aksrt'),
|
||||
];
|
||||
if (!isset($map[$code])) {
|
||||
return;
|
||||
@@ -167,6 +180,17 @@ class UsersMenus {
|
||||
if ($code === 'verify_failed' && isset($_GET['aksrt_verify_error'])) {
|
||||
$message = sanitize_text_field((string) wp_unslash($_GET['aksrt_verify_error']));
|
||||
}
|
||||
if ($code === 'vip_failed' && isset($_GET['aksrt_vip_error'])) {
|
||||
$message = sanitize_text_field((string) wp_unslash($_GET['aksrt_vip_error']));
|
||||
}
|
||||
if (in_array($code, ['vip_updated', 'vip_partial'], true)) {
|
||||
$message .= ' ' . sprintf(
|
||||
__('成功:%1$d;失败:%2$d;跳过:%3$d。', 'aksrt'),
|
||||
absint($_GET['aksrt_vip_ok'] ?? 0),
|
||||
absint($_GET['aksrt_vip_failed_count'] ?? 0),
|
||||
absint($_GET['aksrt_vip_skipped'] ?? 0)
|
||||
);
|
||||
}
|
||||
echo '<div class="notice ' . esc_attr($class) . ' is-dismissible"><p>' . esc_html($message) . '</p></div>';
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user