chore(branding): remove leftover upstream theme identifiers

The theme was renamed Zibll/子比 → AKSRT → Jio, but upstream branding
survived the sweeps in CSS classes, the SVG sprite prefix, a persisted
widget field ID, JS events, admin Vue class names, test infrastructure
and docblocks.

Renames:
- zib-widget / zib-widget-wrap / zib-slider → jio-widget-box /
  jio-widget-box-wrap / jio-slider-box (jio-widget is taken by the modern
  widget shell, jio-box-* by the card primitives)
- zib-partners-scroll + zps-* → jio-partners-scroll + jps-*
- zib-combo-info-card + zci-* → jio-combo-info-card + jci-*
- zibsvg- → jiosvg-, including the exported picker helpers and the
  fa-zibsvg- family-prefix guard
- zibpay_type → pay_type; the dual-read fallback in PostQuery collapses
  to a single key
- [zibajax="submit"] dropped (no PHP emitter); zib_ajax.success →
  jio_ajax.success
- aks-* admin Vue classes → jio-*
- zib_palette() → palette()

User-facing vendor traces are gone: the floating "more" button default no
longer ships a zibll.com link or 子比主题 marketing copy, the notice
widget ships no preset promo entries, and the four 官网教程 links are
removed from the post-list admin schema.

Test infrastructure renamed to neutral names (docker-compose.reference.yml,
Caddyfile, article-baseline.json, modern-widgets-contract.test.cjs) with
their DB/volume/env/slug identifiers following.

Kept intentionally, documented in tests/fixtures/README.md: the golden
fixture reference fingerprint (a SHA-256 record of an external directory,
read by validate-widget-golden / generate-widget-golden-fixture /
audit-widget-system), the doesNotMatch guards that prove the old tokens are
gone, and the reference theme's own meta key in the visual fixtures.

No backward-compat or data migration: saved widget configs holding old
icon keys or the old field ID silently lose them, per the project's
rewrite-over-compatibility rule.

Verified: 132/132 node contract tests, php tests/widget-system/run.php
(146 assertions), audit-admin-contracts, audit-psr4-paths and
validate-widget-golden all green; tracked bundles regenerated and in sync.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-02 00:06:54 +08:00
1 parent 42cc64106d
commit 427968a721
188 files changed
+915 -967

No files matched your search

+47 -66
View File
@@ -1,16 +1,12 @@
<?php
/**
* 前台用户禁封(小黑屋 / 封号)— 1:1 复刻参考主题 Zibll 前台禁封能力:
* zib_get_edit_user_ban_link → jio_get_edit_user_ban_link(三点菜单入口)
* zib_get_set_user_ban_modal → jio_get_user_ban_modal(禁封 / 解封弹窗)
* zib_get_ban_info_modal → jio_get_user_ban_info_modal(查看禁封状态)
* zib_get_user_ban_appeal_modal → jio_get_user_ban_appeal_modal(禁封申诉)
* zib_get_ban_log_modal → jio_get_user_ban_log_modal(禁封记录)
* zib_user_ban_restrict_login → jio_render_user_ban_block_page(登录后禁封页)
* 前台用户禁封(小黑屋 / 封号)— 1:1 复刻上游参考实现的前台用户禁封能力:
* 三点菜单入口、禁封 / 解封弹窗、查看禁封状态、禁封申诉、禁封记录、
* 登录后禁封页。
*
* 数据源唯一:\Jio\User\Restriction(wp_jio_user_restriction 表)。
* 弹窗内容经 REST /user-ban/*-modal 输出(JioModalRuntime.openRemote 拉取,
* 与参考主题 refresh_modal 每次刷新同语义),提交走 REST /user-ban/set 与
* 每次打开均重新拉取),提交走 REST /user-ban/set 与
* admin-ajax jio_ban_appeal_submit。
*
* @package Jio
@@ -25,10 +21,6 @@ defined('ABSPATH') || exit;
* (颜色 / 文案 / 图标统一管理);本 helper 供身份行徽章、用户中心元信息、
* 评论拒绝态等位置复用,避免重复查库。
*
* 对齐参考主题:
* zib_user_is_ban → jio_get_user_ban_state(状态判定)
* zib_ban_author_header_identity_filter → 资料卡/用户中心身份行徽章
*
* @return array{state:string,label:string,tone:string,icon:string}|array{} state 为空串表示无治理状态。
*/
function jio_get_user_ban_state(int $user_id): array
@@ -60,9 +52,8 @@ function jio_get_user_ban_state(int $user_id): array
}
/**
* 目标是否处于封禁/小黑屋状态(举报入口隐藏判定,参考主题
* zib_get_report_link 中 zib_user_is_ban($user_id) 的排除语义;
* 禁言为轻量评论域限制,不隐藏举报入口)。
* 目标是否处于封禁/小黑屋状态(举报入口隐藏判定:封号 / 小黑屋用户不展示
* 举报入口;禁言为轻量评论域限制,不隐藏举报入口)。
*/
function jio_is_user_ban_restricted(int $user_id): bool
{
@@ -71,8 +62,7 @@ function jio_is_user_ban_restricted(int $user_id): bool
}
/**
* 治理状态徽章(占据身份行元信息位,参考主题 author_header_identity 钩子 /
* zib_ban_author_header_identity_filter:badg + 图标 + 文案,红=封号、
* 治理状态徽章(占据身份行元信息位:badg + 图标 + 文案,红=封号、
* 黄=小黑屋、灰=禁言,字段与颜色由 Restriction::state_badges() 统一管理)。
*/
function jio_get_user_ban_identity_badge(int $user_id, string $class = ''): string
@@ -88,8 +78,7 @@ function jio_get_user_ban_identity_badge(int $user_id, string $class = ''): stri
}
/**
* 「查看禁封状态」入口(用户中心元信息位,参考主题 user_page_header_desc
* 钩子 / zib_get_user_ban_info_link:but 按钮 = 内层 badg 徽章(带色)+
* 「查看禁封状态」入口(用户中心元信息位:but 按钮 = 内层 badg 徽章(带色)+
* 右箭头,外层 but 为默认按钮色——不在内外两层重复着色)。
* 点击经 data-jio-ban-info 委托打开禁封信息弹窗。
*/
@@ -106,7 +95,7 @@ function jio_get_user_ban_info_link(int $user_id, string $class = ''): string
if ($badge === '') {
return '';
}
// 外层 but 不重复状态色:颜色仅由内层 badg 承载(1:1 参考主题)。
// 外层 but 不重复状态色:颜色仅由内层 badg 承载。
$classes = trim('but p2-10' . ($class !== '' ? ' ' . $class : ''));
return '<a class="' . esc_attr($classes) . '" href="javascript:;" role="button"'
. ' data-jio-ban-info="' . esc_attr((string) $user_id) . '"'
@@ -115,8 +104,7 @@ function jio_get_user_ban_info_link(int $user_id, string $class = ''): string
}
/**
* 禁封信息弹窗(1:1 复刻参考主题 zib_get_ban_info_modal:多彩头 c-gray +
* 禁封信息行 + 申诉入口;本人或管理员可见)。
* 禁封信息弹窗(多彩头 c-gray + 禁封信息行 + 申诉入口;本人或管理员可见)。
*
* @return string 弹窗 HTML(空串 = 无权查看或用户不存在)
*/
@@ -137,7 +125,7 @@ function jio_get_user_ban_info_modal(int $user_id): string
: [];
$html = '<div class="jio-user-ban-info-modal">';
// 弹窗头(参考主题 zib_get_modal_colorful_header('c-gray', ban 图标, 标题))。
// 弹窗头:灰色 colorful header,ban 图标 + 标题。
$html .= '<div class="modal-colorful-header colorful-bg c-gray"><button type="button" class="close" data-jio-modal-close aria-label="' . esc_attr__('关闭', 'jio') . '">' . jio_user_ban_close_svg() . '</button><div class="colorful-make"></div><div class="text-center"><div class="em2x"><i class="fa fas fa-ban" aria-hidden="true"></i></div><div class="mt10 em12 padding-w10">' . esc_html__('小黑屋禁封中', 'jio') . '</div></div></div>';
if (empty($info)) {
@@ -181,8 +169,8 @@ function jio_get_user_ban_info_modal(int $user_id): string
}
/**
* 「申诉」入口(参考主题 zib_get_user_ban_appeal_link:禁封申诉 modal-mini,
* 仅本人可发起;点击经 data-jio-ban-appeal 委托打开申诉弹窗)。
* 「申诉」入口(禁封申诉 modal-mini,仅本人可发起;
* 点击经 data-jio-ban-appeal 委托打开申诉弹窗)。
*/
function jio_get_user_ban_appeal_link(int $user_id, string $class = ''): string
{
@@ -197,9 +185,8 @@ function jio_get_user_ban_appeal_link(int $user_id, string $class = ''): string
}
/**
* 禁封申诉弹窗(1:1 复刻参考主题 zib_get_user_ban_appeal_modal:
* edit-header(gavel / c-blue / 禁封申诉)+ 禁封信息行 + 申诉说明 + 资料项
* 输入 + 审核中态 + 禁止申诉态;仅本人可见可提交)。
* 禁封申诉弹窗(edit-header(gavel / c-blue / 禁封申诉)+ 禁封信息行 +
* 申诉说明 + 资料项输入 + 审核中态 + 禁止申诉态;仅本人可见可提交)。
*
* @return string 弹窗 HTML(空串 = 非本人或用户不存在)
*/
@@ -218,7 +205,7 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
$status = class_exists('\Jio\User\BanAppeal') ? \Jio\User\BanAppeal::get_status($user_id) : '';
$payload = class_exists('\Jio\User\BanAppeal') ? \Jio\User\BanAppeal::get_payload($user_id) : [];
// 弹窗头(参考主题 edit-header:关闭钮 + gavel 徽标 + 标题居左)。
// 弹窗头:关闭钮 + gavel 徽标 + 标题居左。
$html = '<div class="jio-user-ban-appeal-modal">';
$html .= '<div class="mb10 edit-header touch"><button type="button" class="close" data-jio-modal-close aria-label="' . esc_attr__('关闭', 'jio') . '">' . jio_user_ban_close_svg() . '</button><b class="flex ac c-blue"><span class="toggle-radius mr10 c-blue"><i class="fa fas fa-gavel" aria-hidden="true"></i></span>' . esc_html__('禁封申诉', 'jio') . '</b></div>';
@@ -234,7 +221,7 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
return '<div class="flex"><div class="author-set-left" style="min-width: 80px;">' . esc_html($label) . '</div><div class="author-set-right mt6">' . esc_html($value) . '</div></div>';
};
// 禁封信息行(参考主题申诉弹窗内嵌信息框:用户名/状态/起止时间/原因/说明)。
// 禁封信息行:用户名/状态/起止时间/原因/说明。
$info_box = '<div class="mb10 muted-box padding-10 em09">'
. $set_row(__('用户名', 'jio'), $user->display_name)
. $set_row(__('状态', 'jio'), (string) $info['status'])
@@ -245,7 +232,7 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
. '</div>';
if (!empty($info['no_appeal'])) {
// 禁止申诉态(参考主题:c-yellow box-body + 禁止申诉说明)。
// 禁止申诉态:c-yellow box-body + 禁止申诉说明。
$html .= '<div><div class="c-yellow box-body">' . esc_html__('抱歉!您当前已无法进行申诉', 'jio') . '</div>';
if ((string) $info['no_appeal_desc'] !== '') {
$html .= '<div class="muted-box mt10">' . esc_html((string) $info['no_appeal_desc']) . '</div>';
@@ -262,7 +249,7 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
$input = '';
$footer = '';
if ($status === 'pending') {
// 审核中态(参考主题:黄色 badg + 已提交资料行 + 提交时间)。
// 审核中态:黄色 badg + 已提交资料行 + 提交时间。
$input = '<div class="c-yellow badg block mb6">' . esc_html__('您的申诉正在审核中,请耐心等待', 'jio') . '</div>';
$data = is_array($payload['data'] ?? null) ? $payload['data'] : [];
if (!empty($data)) {
@@ -274,7 +261,7 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
}
$input .= $set_row(__('提交时间', 'jio'), (string) ($payload['time'] ?? ''));
} else {
// 申诉表单(参考主题:资料项逐项输入 + 申诉说明 textarea + 双按钮)。
// 申诉表单:资料项逐项输入 + 申诉说明 textarea + 双按钮。
foreach ((array) $settings['keys'] as $key) {
$key = (string) $key;
if ($key === '') {
@@ -305,8 +292,8 @@ function jio_get_user_ban_appeal_modal(int $user_id): string
}
/**
* 「查看禁封记录」链接(参考主题 zib_get_user_ban_log_link:em09 c-yellow
* 链接触发禁封记录弹窗;仅具备禁封权限的管理员可见)。
* 「查看禁封记录」链接(em09 c-yellow 链接触发禁封记录弹窗;
* 仅具备禁封权限的管理员可见)。
*/
function jio_get_user_ban_log_link(int $user_id, string $class = '', string $con = ''): string
{
@@ -322,9 +309,8 @@ function jio_get_user_ban_log_link(int $user_id, string $class = '', string $con
}
/**
* 禁封记录弹窗(1:1 复刻参考主题 zib_get_ban_log_modal:多彩头 c-yellow +
* 用户行 + 计数 + 逐条记录卡(类型徽章 / 结束时间 / 原因 / 说明 / 禁止申诉);
* 仅具备禁封权限的管理员可见)。
* 禁封记录弹窗(多彩头 c-yellow + 用户行 + 计数 + 逐条记录卡
* (类型徽章 / 结束时间 / 原因 / 说明 / 禁止申诉);仅具备禁封权限的管理员可见)。
*
* @return string 弹窗 HTML(空串 = 无权查看)
*/
@@ -342,7 +328,7 @@ function jio_get_user_ban_log_modal(int $user_id): string
return in_array((string) ($r['type'] ?? ''), ['ban', 'suspend'], true);
}));
// 弹窗头(参考主题 zib_get_modal_colorful_header('c-yellow', ban 图标, 标题))。
// 弹窗头:黄色 colorful header,ban 图标 + 标题。
$html = '<div class="jio-user-ban-log-modal">';
$html .= '<div class="modal-colorful-header colorful-bg c-yellow"><button type="button" class="close" data-jio-modal-close aria-label="' . esc_attr__('关闭', 'jio') . '">' . jio_user_ban_close_svg() . '</button><div class="colorful-make"></div><div class="text-center"><div class="em2x"><i class="fa fas fa-ban" aria-hidden="true"></i></div><div class="mt10 em12 padding-w10">' . esc_html__('禁封记录', 'jio') . '</div></div></div>';
@@ -395,8 +381,7 @@ function jio_get_user_ban_log_modal(int $user_id): string
}
/**
* 受限位置治理提示(评论拒绝态,参考主题 zib_get_user_ban_nocan_info 语义:
* 状态徽章 +「暂时无法操作」+ 查看禁封状态入口)。
* 受限位置治理提示(评论拒绝态:状态徽章 +「暂时无法操作」+ 查看禁封状态入口)。
*
* @param string $msg 具体受阻的操作描述,如「发表评论」。
*/
@@ -418,7 +403,7 @@ function jio_get_user_ban_nocan_html(int $user_id, string $msg = ''): string
}
/**
* 昵称旁禁封徽章(参考主题 user_name_badge 钩子语义:占据 VIP 图标位,
* 昵称旁禁封徽章(占据 VIP 图标位,
* 头像角标 user_avatar_badge 为可选项,见 jio_get_user_ban_avatar_badge)。
*/
function jio_get_user_ban_name_badge(int $user_id): string
@@ -432,7 +417,7 @@ function jio_get_user_ban_name_badge(int $user_id): string
}
/**
* 头像禁封角标(参考主题 user_avatar_badge 钩子语义:覆盖 VIP 角标位)。
* 头像禁封角标(覆盖 VIP 角标位)。
*/
function jio_get_user_ban_avatar_badge(int $user_id): string
{
@@ -446,8 +431,7 @@ function jio_get_user_ban_avatar_badge(int $user_id): string
}
/**
* 登录后禁封状态页(1:1 复刻参考主题 zib_user_ban_restrict_login /
* zib_die_page:红盒提示 + 禁封信息行 + 申诉权限 + 退出登录/申诉按钮)。
* 登录后禁封状态页(红盒提示 + 禁封信息行 + 申诉权限 + 退出登录/申诉按钮)。
* 由 Restriction::restrict_frontend_access() 在 template_redirect 调用。
*/
function jio_render_user_ban_block_page(int $user_id): void
@@ -489,8 +473,7 @@ function jio_render_user_ban_block_page(int $user_id): void
}
/**
* 禁封功能开关(后台“用户&互动 → 禁封/举报 → 禁封功能”,
* 对齐参考主题 _pz('user_ban_s', true):缺键默认开启)。
* 禁封功能开关(后台“用户&互动 → 禁封/举报 → 禁封功能”,缺键默认开启)。
*/
function jio_user_ban_enabled(): bool
{
@@ -502,7 +485,7 @@ function jio_user_ban_enabled(): bool
}
/**
* 当前用户能否禁封目标用户(对齐参考主题 zib_current_user_can('set_user_ban') 语义)。
* 当前用户能否禁封目标用户(需 manage_options 权限,且不能禁封自己 / 超级管理员)。
*/
function jio_current_user_can_ban(int $user_id): bool
{
@@ -535,7 +518,7 @@ function jio_get_user_current_ban(int $user_id): ?array
}
/**
* 禁封 / 解封触发器(参考主题 zib_get_edit_user_ban_link)。
* 禁封 / 解封触发器。
* 输出 data-jio-ban 委托入口,由 assets/js/user-ban.js 打开禁封弹窗。
*/
function jio_get_edit_user_ban_link(int $user_id = 0, string $class = '', string $con = ''): string
@@ -552,7 +535,7 @@ function jio_get_edit_user_ban_link(int $user_id = 0, string $class = '', string
}
/**
* 用户主页封面三点菜单项(参考主题 author_header_drop_lists 钩子语义):
* 用户主页封面三点菜单项:
* 有禁封权限 → 禁封入口;否则(开启举报且非本人)→ 举报入口。
*/
function jio_get_user_cover_menu_action_html(int $user_id): string
@@ -566,9 +549,8 @@ function jio_get_user_cover_menu_action_html(int $user_id): string
}
/**
* 评论三点菜单项(参考主题 comments_action_lists 钩子语义):
* 管理员 → 禁封用户(固定文案,与参考主题 zib_ban_comments_action_lists_filter
* 一致——解封态由弹窗内容呈现);否则 → 举报( Jio 既有评论举报契约)。
* 评论三点菜单项:
* 管理员 → 禁封用户(固定文案,解封态由弹窗内容呈现);否则 → 举报( Jio 既有评论举报契约)。
*/
function jio_get_comment_ban_or_report_item(\WP_Comment $comment): string
{
@@ -583,9 +565,9 @@ function jio_get_comment_ban_or_report_item(\WP_Comment $comment): string
}
/**
* 文章作者资料卡三点菜单项(参考主题 zib_get_post_more_dropdown 语义,菜单首项):
* 文章作者资料卡三点菜单项(菜单首项):
* 管理员 → 禁封用户(固定文案,解封态由弹窗内容呈现);否则 → 空(由既有
* 文章举报项兜底,与参考主题「禁封优先、否则举报」互斥语义一致)。
* 文章举报项兜底,与「禁封优先、否则举报」互斥语义一致)。
*/
function jio_get_post_author_ban_item(int $author_id, string $post_url = ''): string
{
@@ -607,7 +589,7 @@ function jio_user_ban_close_svg(): string
}
/**
* 禁封 / 解封弹窗内容 — 1:1 复刻参考主题 zib_get_set_user_ban_modal:
* 禁封 / 解封弹窗内容:
* 未禁封 → 禁封表单(禁封方式 / 禁封时间 / 预置原因徽章 / 其它原因 /
* 禁封说明 / 删除全部内容 / 禁止用户申诉(含说明));
* 已禁封 → 解封视图(状态信息 + 解封留言表单)。
@@ -623,7 +605,7 @@ function jio_get_user_ban_modal(int $user_id): string
$ban = jio_get_user_current_ban($user_id);
// 用户行(头像 + 昵称),与参考主题弹窗头部同构。
// 用户行(头像 + 昵称)。
$avatar_url = get_avatar_url($user_id, ['size' => 40]);
$user_name = function_exists('jio_get_user_name')
? jio_get_user_name(['id' => $user_id, 'vip' => false, 'medal' => false])
@@ -635,11 +617,11 @@ function jio_get_user_ban_modal(int $user_id): string
$html = '<div class="jio-user-ban-modal">';
if ($ban) {
// ── 已禁封视图:解封(参考主题解封弹窗同构) ──
// ── 已禁封视图:解封 ──
$is_ban = (string) ($ban['type'] ?? '') === 'ban';
$unban_title = $is_ban ? __('解封用户', 'jio') : __('移出小黑屋', 'jio');
// 用户名徽章(参考主题 zib_get_user_name(...&class=inflex ac badg p2-10 em09))。
// 用户名徽章(inflex ac badg p2-10 em09)。
$user_badge = function_exists('jio_get_user_name')
? jio_get_user_name(['id' => $user_id, 'class' => 'inflex ac badg p2-10 em09', 'vip' => false, 'medal' => false, 'auth' => false, 'level' => false])
: '<b>' . esc_html($user->display_name) . '</b>';
@@ -657,7 +639,7 @@ function jio_get_user_ban_modal(int $user_id): string
return '<div class="mb10 flex"><div class="author-set-left" style="min-width: 80px;">' . esc_html($label) . '</div><div class="author-set-right mt6">' . $html_value . '</div></div>';
};
// 禁封记录入口(参考主题:>1 次时展示可点击记录链接,打开禁封记录弹窗)。
// 禁封记录入口:>1 次时展示可点击记录链接,打开禁封记录弹窗。
$log_count = 0;
if (class_exists('\Jio\User\Restriction')) {
$all = \Jio\User\Restriction::get_instance()->get_user_restrictions($user_id, false);
@@ -672,8 +654,8 @@ function jio_get_user_ban_modal(int $user_id): string
? '<div class="mb10 flex"><div class="author-set-left" style="min-width: 80px;">' . esc_html__('禁封记录', 'jio') . '</div><div class="author-set-right mt6">' . $log_link . '</div></div>'
: '';
// 弹窗头(参考主题 zib_get_modal_colorful_header('c-yellow', ban 图标, 标题):
// 120px 多彩横幅 + 大图标 + 居中标题,与禁封视图的 edit-header 头对应)。
// 弹窗头:黄色 colorful header(120px 多彩横幅 + 大图标 + 居中标题,
// 与禁封视图的 edit-header 头对应)。
$html .= '<div class="modal-colorful-header colorful-bg c-yellow"><button type="button" class="close" data-jio-modal-close aria-label="' . esc_attr__('关闭', 'jio') . '">' . jio_user_ban_close_svg() . '</button><div class="colorful-make"></div><div class="text-center"><div class="em2x"><i class="fa fas fa-ban" aria-hidden="true"></i></div><div class="mt10 em12 padding-w10">' . esc_html($unban_title) . '</div></div></div>';
$html .= '<form class="jio-user-ban-form" data-jio-ban-form data-jio-ban-mode="unban" data-jio-ban-user="' . esc_attr((string) $user_id) . '">';
$html .= '<div class="mb20">';
@@ -694,12 +676,11 @@ function jio_get_user_ban_modal(int $user_id): string
return $html;
}
// ── 未禁封视图:禁封表单(参考主题禁封弹窗同构) ──
// ── 未禁封视图:禁封表单 ──
$close_svg = jio_user_ban_close_svg();
$html .= '<div class="mb10 edit-header touch"><button type="button" class="close" data-jio-modal-close aria-label="' . esc_attr__('关闭', 'jio') . '">' . $close_svg . '</button><b class="flex ac c-red"><span class="toggle-radius mr10 c-red"><i class="fa fas fa-ban" aria-hidden="true"></i></span>' . esc_html__('禁封用户', 'jio') . '</b></div>';
// 历史禁封次数提示(1:1 参考主题 zib_get_set_user_ban_modal:>1 次时
// 展示「禁封记录」行 + 可点击的黄链(打开禁封记录弹窗))。
// 历史禁封次数提示:>1 次时展示「禁封记录」行 + 可点击的黄链(打开禁封记录弹窗)。
$log_count = 0;
if (class_exists('\Jio\User\Restriction')) {
$all = \Jio\User\Restriction::get_instance()->get_user_restrictions($user_id, false);
@@ -729,7 +710,7 @@ function jio_get_user_ban_modal(int $user_id): string
$html .= '<div data-jio-ban-desc="2" style="display:none;">' . esc_html__('禁封的用户将不能登录', 'jio') . '</div>';
$html .= '</div>';
// 禁封时间(1/7/14/30/100/永久,默认 7 天,对齐参考主题 checked(7, ...))。
// 禁封时间(1/7/14/30/100/永久,默认 7 天)。
$html .= '<div class="muted-2-color mb6">' . esc_html__('禁封时间', 'jio') . '</div>';
$html .= '<div class="form-radio mb10 form-but-radio">';
foreach ([1 => __('1天', 'jio'), 7 => __('7天', 'jio'), 14 => __('14天', 'jio'), 30 => __('30天', 'jio'), 100 => __('100天', 'jio'), 0 => __('永久', 'jio')] as $days => $label) {