fix(frontend): route the VIP points-exchange entry through the custom currency name

/user/vip/ 档位购买卡下方的入口横条仍硬编码「积分兑换会员」,而后台
「积分配置 → 自定义货币名称」改名后不跟随。上一轮改名只覆盖了兑换弹窗
标题与会员弹窗内入口,页面自身的入口横条是另一处服务端渲染,漏改了。

入口横条(inc/helpers/aksrt-vip.php)
- aksrt_get_vip_points_exchange_entry_html 改取已加载的
  catalog.currency_name,回退 Settings::get_currency_name() 再回退「积分」

同一页面上其余漏改的兑换文案一并收口,命名与入口/弹窗保持一致:
- VipServiceModal:积分不足提示 → {货币名}不足,暂时无法兑换
- VipServicePurchase.exchange_with_points:兑换未启用 / 兑换无效 /
  不足三处 WP_Error、流水说明、订单备注(%1$s兑换会员 %2$d %1$s。)
  currency_name 在此单独解析,get_catalog 内的局部变量不在该作用域
- LedgerPresentation:vip_points_exchange 流水原因标签

契约测试新增源断言,并用两个 PHP harness 做运行时断言:入口横条
(改名后 / 已是会员不输出 / 缺 key 回退)与弹窗(余额充足 / 不足两分支)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-01 16:19:49 +08:00
1 parent 4e62b325d2
commit 5b16bc6e15
7 files changed
+177 -11

No files matched your search

+14 -2
View File
@@ -429,12 +429,15 @@ if (!function_exists('aksrt_get_vip_purchase_url')) {
*
* 参考主题在「我的会员」摘要与两张档位购买卡之后输出全宽入口横条:
* .c-yellow.zib-widget.flex.ac.jsb(zib-widget → 本主题 aksrt-panel 表面)
* ├─ .flex1.em12:points-color 图标 +「积分兑换会员」
* ├─ .flex1.em12:points-color 图标 +「{自定义货币名}兑换会员」
* └─ .badg.radius.c-yellow:「立即兑换」+ fa-chevron-circle-right
* 门控对齐参考主题 zibpay_get_vip_points_exchange_link:已是会员不展示
* ($vip_level ? '' : link),且要求积分兑换会员开启、至少一个会员等级
* 开启并存在可兑换套餐(catalog.points_exchange 已内含 credits 门控)。
*
* 入口文案的货币名取 catalog.currency_name(后台「积分配置 → 自定义货币名称」),
* 与它打开的兑换弹窗标题、会员弹窗内的入口保持同一命名。
*
* 入口点击经 data-aksrt-vip-points-open 由 pay-vip.js 打开 wp_footer 输出的
* 静态兑换弹窗(aksrt_render_vip_points_exchange_modal),与会员购买弹窗内
* 的入口共用同一弹窗与开合开关。
@@ -463,10 +466,19 @@ if (!function_exists('aksrt_get_vip_points_exchange_entry_html')) :
return '';
}
// 入口文案跟随自定义货币名称(后台「积分配置 → 自定义货币名称」),与它打开的
// 兑换弹窗标题(VipServiceModal)和会员弹窗内的入口(pay-vip.js)保持同一命名。
$currency = (string) ($catalog['currency_name'] ?? '');
if ($currency === '') {
$currency = class_exists('\AKSRT\Settings\Settings')
? \AKSRT\Settings\Settings::get_currency_name()
: __('积分', 'aksrt');
}
return '<a class="uc-vip-points-entry flex ac jsb" href="javascript:;" data-aksrt-vip-points-open>'
. '<span class="flex1 em12 c-yellow">'
. '<svg class="icon mr6 em12" aria-hidden="true"><use xlink:href="#icon-points-color"></use></svg>'
. esc_html__('积分兑换会员', 'aksrt')
. esc_html(sprintf(__('%s兑换会员', 'aksrt'), $currency))
. '</span>'
. '<span class="badg radius c-yellow">' . esc_html__('立即兑换', 'aksrt')
. '<i class="fa fas fa-chevron-circle-right ml6" aria-hidden="true"></i></span></a>';