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

@@ -2,8 +2,7 @@
/**
* Affiliate poster preview modal.
*
* 1:1 replica of the reference theme's poster-share modal (zibll js/poster-share.js
* + css/main.css `.poster-share` block): a borderless 360px Bootstrap-style dialog
* Poster-share modal: a borderless 360px Bootstrap-style dialog
* centred by `.modal.flex.jc`, a `.loading-mask` overlay while the canvas renders,
* and circular download/close buttons on a `.hover-show-con` layer that only fades
* in on hover. The 推广海报 button lives in the revenue detail link row; the QR code
@@ -64,7 +64,7 @@ $points_signin_label = sprintf(__('签到领%s', 'jio'), $currency);
</div>
<?php if ($points_exchange_on) :
// 购买积分弹窗 — Zibll zibpay_get_points_pay_modal 1:1(商品盒 / 自定义 / 支付方式含卡密 / 立即支付)。
// 购买积分弹窗(商品盒 / 自定义 / 支付方式含卡密 / 立即支付)。
$pb_rate = max(1, (int) ($points_exchange['rate'] ?? 100));
$pb_min_points = max(1, (int) ($points_exchange['min_points'] ?? 100));
$pb_daily_max_points = max(1, (int) ($points_exchange['daily_max_points'] ?? 100000));
@@ -109,7 +109,7 @@ $points_signin_label = sprintf(__('签到领%s', 'jio'), $currency);
<?php if ($points_packages) : ?>
<div class="muted-color mb6"><?php printf(esc_html__('请选择需购买的%s', 'jio'), esc_html($currency)); ?></div>
<?php foreach ($points_packages as $pidx => $ppkg) : ?>
<div class="zib-widget vip-product relative product-box<?php echo $pidx === 0 ? ' active' : ''; ?>" data-for="points_product" data-value="<?php echo esc_attr((string) $ppkg['key']); ?>">
<div class="jio-widget-box vip-product relative product-box<?php echo $pidx === 0 ? ' active' : ''; ?>" data-for="points_product" data-value="<?php echo esc_attr((string) $ppkg['key']); ?>">
<?php if (!empty($ppkg['tag'])) : ?>
<div class="abs-right vip-tag badg jb-yellow"><?php echo esc_html((string) $ppkg['tag']); ?></div>
<?php endif; ?>
@@ -100,7 +100,7 @@ $mark = (string) ($charge_view['currency_mark'] ?? '元');
<?php endif; ?>
</div>
<!-- Charge modal — Zibll balance-charge modal 1:1 (refresh_modal shell + zibpay_get_balance_charge_modal) -->
<!-- Charge modal — balance-charge modal (refresh_modal shell) -->
<?php
$charge_method_logos = [
'balance' => 'pay-balance-logo.svg',
@@ -124,7 +124,7 @@ $charge_mark_html = $charge_mark_symbol
? '<span class="px12">' . esc_html($mark) . '</span>'
: '';
$charge_unit = $charge_mark_symbol ? '' : (string) $mark;
// 与 Zibll 格式对齐(mark 前缀:最低充值¥1);mark 配置为单位(元)时用后缀:最低充值1元。
// 充值额度文案(mark 前缀:最低充值¥1);mark 配置为单位(元)时用后缀:最低充值1元。
$charge_limit_html = $charge_mark_symbol
? sprintf(__('最低充值%1$s1,最高充值%1$s%2$s', 'jio'), $mark, $custom_limit)
: sprintf(__('最低充值1%1$s,最高充值%2$s%1$s', 'jio'), $charge_unit, $custom_limit);
@@ -156,7 +156,7 @@ $charge_custom_block = static function () use ($mark, $charge_mark_html, $charge
$package_pay = $normalize_balance($pkg['pay_price'] ?? '');
$package_saving_minor = max(0, $package_credit->minor() - $package_pay->minor());
?>
<div class="zib-widget vip-product relative product-box<?php echo $idx === 0 ? ' active' : ''; ?>" data-for="balance_product" data-value="<?php echo esc_attr((string) $pkg['key']); ?>">
<div class="jio-widget-box vip-product relative product-box<?php echo $idx === 0 ? ' active' : ''; ?>" data-for="balance_product" data-value="<?php echo esc_attr((string) $pkg['key']); ?>">
<?php if (!empty($pkg['tag'])) : ?>
<div class="abs-right vip-tag badg jb-yellow"><?php echo esc_html((string) $pkg['tag']); ?></div>
<?php endif; ?>
@@ -14,14 +14,14 @@ $info = is_array($snapshot['info'] ?? null) ? $snapshot['info'] : [];
$application = is_array($snapshot['application'] ?? null) ? $snapshot['application'] : [];
$status = (string) ($snapshot['status'] ?? '');
$can_apply = !empty($snapshot['can_apply']);
$auth_icon = function_exists('jio_icon_markup') ? jio_icon_markup('zibsvg-user-auth') : '<i class="fa fas fa-id-badge" aria-hidden="true"></i>';
$close_icon = function_exists('jio_icon_markup') ? jio_icon_markup('zibsvg-close', 'ic-close') : '<i class="fa fas fa-times" aria-hidden="true"></i>';
$auth_icon = function_exists('jio_icon_markup') ? jio_icon_markup('jiosvg-user-auth') : '<i class="fa fas fa-id-badge" aria-hidden="true"></i>';
$close_icon = function_exists('jio_icon_markup') ? jio_icon_markup('jiosvg-close', 'ic-close') : '<i class="fa fas fa-times" aria-hidden="true"></i>';
$config = [
'restBase' => untrailingslashit(rest_url('jio/v1/identity/applications')),
'nonce' => wp_create_nonce('wp_rest'),
];
?>
<div class="colorful-bg c-blue flex jc zib-widget" style="padding: 40px 20px;" data-identity-root data-identity-config="<?php echo esc_attr(wp_json_encode($config)); ?>">
<div class="colorful-bg c-blue flex jc jio-widget-box" style="padding: 40px 20px;" data-identity-root data-identity-config="<?php echo esc_attr(wp_json_encode($config)); ?>">
<div class="colorful-make"></div>
<div class="text-center">
<div class="em4x"><?php echo $auth_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></div>
@@ -47,8 +47,8 @@ extract($context, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_
</h1>
<div class="uc-header__meta desc user-identity flex ac hh">
<?php
// 治理状态入口(参考主题 user_page_header_desc 钩子 / zib_get_user_ban_info_link:
// 用户中心「封禁」元信息,点击打开查看禁封状态弹窗 → 申诉弹窗)。
// 治理状态入口:用户中心「封禁」元信息,
// 点击打开查看禁封状态弹窗 → 申诉弹窗。
if (function_exists('jio_get_user_ban_info_link')) {
echo jio_get_user_ban_info_link((int) $user_id); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- helper escapes internally.
}
@@ -50,7 +50,7 @@ $percentage = max(0, min(100, (int) ($progress['progress'] ?? 0)));
<div class="jio-level-page">
<div class="row jio-level-page__summary">
<div class="col-md-5">
<section class="zib-widget colorful-bg jb-vip1 jio-level-card jio-level-card--summary">
<section class="jio-widget-box colorful-bg jb-vip1 jio-level-card jio-level-card--summary">
<div class="colorful-make" aria-hidden="true"></div>
<div class="jio-level-card__summary-inner">
<div class="jio-level-card__identity">
@@ -73,7 +73,7 @@ $percentage = max(0, min(100, (int) ($progress['progress'] ?? 0)));
</section>
</div>
<div class="col-md-7">
<section class="zib-widget colorful-bg c-gray jio-level-card jio-level-card--growth">
<section class="jio-widget-box colorful-bg c-gray jio-level-card jio-level-card--growth">
<div class="colorful-make" aria-hidden="true"></div>
<div class="jio-level-card__growth-inner">
<div class="jio-level-card__growth-head">
@@ -107,7 +107,7 @@ $percentage = max(0, min(100, (int) ($progress['progress'] ?? 0)));
</div>
</div>
<section class="zib-widget jio-level-experience">
<section class="jio-widget-box jio-level-experience">
<div class="box-body">
<div class="jio-level-tabs" role="tablist" aria-label="<?php esc_attr_e('经验记录', 'jio'); ?>">
<a id="tab-integral-get" class="but mr6 is-active" data-jio-level-tab="tab_integral_get" href="#tab_integral_get" role="tab" aria-controls="tab_integral_get" aria-selected="true"><?php esc_html_e('获取经验值', 'jio'); ?></a>
@@ -15,7 +15,7 @@ require __DIR__ . '/sidebar-vip.php';
require __DIR__ . '/sidebar-commerce.php';
require __DIR__ . '/sidebar-creator.php';
require __DIR__ . '/sidebar-nav.php';
$drawer_trigger_icon = jio_icon_markup('zibsvg-menu');
$drawer_trigger_icon = jio_icon_markup('jiosvg-menu');
?>
<button type="button" class="uc-sidebar__drawer-trigger" id="uc-drawer-trigger" aria-label="<?php esc_attr_e('打开导航', 'jio'); ?>">
<?php echo $drawer_trigger_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
@@ -25,7 +25,7 @@ $can_recover_password = $sign_in_available && ($reset_channel === 'email_phone'
: ($reset_channel === 'phone' ? $account_phone !== '' : $account_email !== ''));
$recovery_target = $reset_channel === 'phone' ? $account_phone : ($account_email !== '' ? $account_email : $account_phone);
$recovery_channel = $reset_channel === 'email_phone' ? '' : $reset_channel;
$account_close_icon = function_exists('jio_icon_markup') ? jio_icon_markup('zibsvg-close', 'ic-close') : '<i class="fa fas fa-times" aria-hidden="true"></i>';
$account_close_icon = function_exists('jio_icon_markup') ? jio_icon_markup('jiosvg-close', 'ic-close') : '<i class="fa fas fa-times" aria-hidden="true"></i>';
$render_row = static function (string $icon, string $title, string $value, string $action, string $modal, string $icon_tone, string $action_tone, bool $interactive = true): void {
?>
@@ -26,8 +26,8 @@ foreach ((array) ($oauth_data['bindings'] ?? []) as $binding) {
if (!$key) {
continue;
}
// Reference parity: the provider type (clogin_ prefix stripped) drives the
// .social-login-item brand colour, matching zibll's binding list.
// The provider type (clogin_ prefix stripped) drives the
// .social-login-item brand colour.
$icon_type = str_starts_with($key, 'clogin_') ? substr($key, 7) : $key;
$binding_rows[$key] = [
'key' => $key,
@@ -20,9 +20,9 @@ try {
$wallet = '0.00';
}
$points = max(0, (int) ($credit_balance ?? 0));
$wallet_icon = jio_icon_markup('zibsvg-money-color-2');
$points_icon = jio_icon_markup('zibsvg-points-color');
$arrow_icon = jio_icon_markup('zibsvg-right');
$wallet_icon = jio_icon_markup('jiosvg-money-color-2');
$points_icon = jio_icon_markup('jiosvg-points-color');
$arrow_icon = jio_icon_markup('jiosvg-right');
?>
<div class="uc-sidebar__pair uc-sidebar__pair--assets">
<?php if ($show_wallet) : ?>
@@ -2,9 +2,8 @@
/**
* User center sidebar: creator center / promotion center cards.
*
* 1:1 port of the reference theme zib_user_center_page_sidebar_income_rebate():
* two zib-widget cards, each with an icon title row and two centered stats.
* Navigation keeps the Jio <a href data-tab> contract instead of the reference click proxy.
* Two jio-widget-box cards, each with an icon title row and two centered stats.
* Navigation uses the Jio <a href data-tab> contract.
*
* @package Jio
*/
@@ -36,7 +35,7 @@ if ($creation_url !== '') {
$centers[] = [
'url' => $creation_url,
'tab' => 'creator',
'icon' => jio_icon_markup('zibsvg-merchant-color', 'mr6'),
'icon' => jio_icon_markup('jiosvg-merchant-color', 'mr6'),
'title' => __('创作中心', 'jio'),
'first' => jio_cut_count($cash_income),
'first_l' => __('现金收益', 'jio'),
@@ -64,7 +63,7 @@ if ($revenue_url !== '') {
$centers[] = [
'url' => $revenue_url,
'tab' => 'revenue',
'icon' => jio_icon_markup('zibsvg-money-color', 'mr6'),
'icon' => jio_icon_markup('jiosvg-money-color', 'mr6'),
'title' => __('推广中心', 'jio'),
'first' => $rebate_ratio . '%',
'first_l' => __('比例', 'jio'),
@@ -75,7 +74,7 @@ if ($revenue_url !== '') {
?>
<div class="uc-sidebar-centers flex ab jsb col-ml6<?php echo $user_id <= 0 ? ' signin-loader' : ''; ?>">
<?php foreach ($centers as $center) : ?>
<a style="flex: 1;" class="mb10-sm zib-widget padding-10 flex1 pointer" href="<?php echo esc_url($center['url']); ?>" data-tab="<?php echo esc_attr($center['tab']); ?>">
<a style="flex: 1;" class="mb10-sm jio-widget-box padding-10 flex1 pointer" href="<?php echo esc_url($center['url']); ?>" data-tab="<?php echo esc_attr($center['tab']); ?>">
<div class="muted-color em09 mb6 flex ac"><div class="overflow-hidden"><div class="text-ellipsis"><?php echo $center['icon']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?><?php echo esc_html($center['title']); ?></div></div><i class="ml6 fa fas fa-angle-right em12" aria-hidden="true"></i></div>
<div class="flex jsa text-center"><div class=""><div class="font-bold em12"><?php echo esc_html($center['first']); ?></div><div class="px12 opacity5"><?php echo esc_html($center['first_l']); ?></div></div><div class="overflow-hidden"><div class="font-bold em12"><?php echo esc_html($center['second']); ?></div><div class="px12 opacity5 text-ellipsis"><?php echo esc_html($center['second_l']); ?></div></div></div>
</a>
@@ -19,7 +19,7 @@ $orders_url = $orders_available ? (string) ($orders_url ?? '') : '';
$tickets_available = isset($dashboard_tabs['tickets']);
$tickets_url = $tickets_available ? jio_get_user_center_tab_url('tickets') : '';
// 参考主题由 zibpay 把「我的订单」前插到按钮组最前,其后才是等级 / 认证。
// 「我的订单」位于按钮组最前,其后才是等级 / 认证。
$services = array_values(array_filter([
[
'label' => __('我的订单', 'jio'),
@@ -74,7 +74,7 @@ $render_grid = static function (array $items): void {
<?php foreach ($items as $item) :
$tab = (string) ($item['tab'] ?? '');
$item_class = 'icon-but-' . ($tab !== '' ? $tab : 'item');
$icon_html = jio_icon_markup('zibsvg-' . (string) $item['icon']);
$icon_html = jio_icon_markup('jiosvg-' . (string) $item['icon']);
?>
<a class="<?php echo esc_attr($item_class); ?>" href="<?php echo esc_url((string) $item['url']); ?>"<?php if ($tab !== '') : ?> data-tab="<?php echo esc_attr($tab); ?>"<?php endif; ?>>
<div class="em16"><?php echo $icon_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></div>
@@ -86,14 +86,14 @@ $render_grid = static function (array $items): void {
};
?>
<?php if ($services) : ?>
<div class="uc-sidebar-iconbox zib-widget padding-6 mb10-sm">
<div class="uc-sidebar-iconbox jio-widget-box padding-6 mb10-sm">
<div class="padding-6 ml3"><?php esc_html_e('我的服务', 'jio'); ?></div>
<?php $render_grid($services); ?>
</div>
<?php endif; ?>
<?php if ($settings) : ?>
<div class="uc-sidebar-iconbox zib-widget padding-6">
<div class="uc-sidebar-iconbox jio-widget-box padding-6">
<div class="padding-6 ml3"><?php esc_html_e('功能设置', 'jio'); ?></div>
<?php $render_grid($settings); ?>
</div>
@@ -34,8 +34,8 @@ $stats = [
],
];
?>
<?php // 1:1 参考主题 zib_user_center_page_sidebar_statistics():单张 zib-widget,四项 space-around 平铺。 ?>
<div class="uc-sidebar-statistics mb10-sm mb20 flex ac jsa zib-widget padding-10 text-center" aria-label="<?php esc_attr_e('账号统计', 'jio'); ?>">
<?php // 单张 jio-widget-box,四项 space-around 平铺。 ?>
<div class="uc-sidebar-statistics mb10-sm mb20 flex ac jsa jio-widget-box padding-10 text-center" aria-label="<?php esc_attr_e('账号统计', 'jio'); ?>">
<?php foreach ($stats as $stat) : ?>
<a class="user-statistics-item" href="<?php echo esc_url((string) $stat['url']); ?>"<?php if (!empty($stat['tab'])) : ?> data-tab="<?php echo esc_attr((string) $stat['tab']); ?>"<?php endif; ?>><div class="em14"><?php echo esc_html(jio_cut_count((int) $stat['value'])); ?></div><div class="em09 opacity5 mt6"><?php echo esc_html((string) $stat['label']); ?></div></a>
<?php endforeach; ?>
@@ -2,10 +2,9 @@
/**
* User center sidebar: VIP entry.
*
* 1:1 port of the reference theme zib_user_center_page_sidebar_vip():
* metallic payvip-icon bar, level icon + name + expiry badge for members,
* Metallic payvip-icon bar, level icon + name + expiry badge for members,
* vip_1 icon + "开通会员 尊享会员权益" otherwise, chevron pinned right.
* Navigation keeps the Jio <a href data-tab> contract instead of the reference click proxy.
* Navigation uses the Jio <a href data-tab> contract.
*
* @package Jio
*/
@@ -27,7 +26,7 @@ $vip_url = jio_get_user_center_tab_url('vip');
if ($vip_level > 0) {
$vip_name = (string) ($vip_levels[$vip_level]['name_html'] ?? $vip_levels[$vip_level]['name'] ?? ('VIP' . $vip_level));
// Same semantics as zib_get_user_vip_exp_date_text(): date / 会员已过期 / 永久会员,
// Expiry badge: date / 会员已过期 / 永久会员,
// and no badge at all when there is no expiry data.
$expires = max(0, (int) ($vip_state['expires'] ?? 0));
$exp_label = '';
@@ -41,11 +40,11 @@ if ($vip_level > 0) {
. '<span>' . wp_kses_post($vip_name) . '</span>';
if ($exp_label !== '') {
$button .= '<span class="ml10 badg jb-yellow vip-expdate-tag">'
. jio_icon_markup('zibsvg-time', 'mr3')
. jio_icon_markup('jiosvg-time', 'mr3')
. esc_html($exp_label) . '</span>';
}
} else {
$button = jio_icon_markup('zibsvg-vip_1', 'em12 mr6') . esc_html__('开通会员 尊享会员权益', 'jio');
$button = jio_icon_markup('jiosvg-vip_1', 'em12 mr6') . esc_html__('开通会员 尊享会员权益', 'jio');
}
$vip_class = 'uc-sidebar-vip mb20 mb10-sm main-radius payvip-icon btn-block badg pointer' . ($user_id <= 0 ? ' signin-loader' : '');
@@ -118,7 +118,7 @@ foreach ([1, 2] as $lv) {
: '';
$cta = __('开通', 'jio') . wp_kses_post($lv_name);
$vip_attr = $lv;
// 参考主题 zibpay_get_vip_card:续费/升级档位卡展示各自的一句话简介。
// 续费/升级档位卡展示各自的一句话简介。
$card_action = 'pay';
$card_desc = $lv_desc;
$lv_icon_url = esc_url((string) ($levels[$lv]['img_icon'] ?? ''));
@@ -182,8 +182,8 @@ foreach ([1, 2] as $lv) {
</div>
<?php
// 积分兑换会员入口(参考主题 zibpay_user_page_tab_content_vip 1:1:档位购买卡
// 下方的全宽横条;仅非会员 + 积分兑换开启 + 有可兑换套餐时输出)。
// 积分兑换会员入口(档位购买卡下方的全宽横条;
// 仅非会员 + 积分兑换开启 + 有可兑换套餐时输出)。
echo jio_get_vip_points_exchange_entry_html($user_id, $level); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- 各字段已在生成时转义。
?>
</div>