You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WHMCS自定义Disputed发票状态创建后显示异常求助

解决WHMCS自定义「Disputed」发票状态显示异常问题

只修改tblinvoices表的status字段无法让WHMCS完全识别自定义状态——WHMCS的发票状态依赖语言定义、核心状态枚举、模板逻辑三层支撑,只改数据库会导致系统无法匹配状态文本、样式和逻辑,从而出现你遇到的PDF显示原始值、后台/前台状态为空、列表不识别的问题。

以下是完整的修复步骤:

1. 添加状态语言定义

避免修改官方语言文件,优先使用语言覆盖目录:

  • 在WHMCS根目录创建lang/overrides目录(如果不存在)
  • 新建/编辑lang/overrides/zh-CN.php(中文环境)或en.php(英文环境),添加:
    $_LANG['invoicestatusdisputed'] = '争议支付'; // 英文环境改为'Disputed'
    

2. 让系统识别状态枚举

推荐用钩子实现(避免修改核心文件,防止升级覆盖):

  • 在includes/hooks目录新建disputed_invoice_status.php,写入:
    // 扩展发票状态列表
    add_hook('InvoiceStatusList', 1, function($vars) {
        return ['Disputed' => $_LANG['invoicestatusdisputed']];
    });
    
    // 给状态添加后台样式
    add_hook('AdminInvoiceStatusLabel', 1, function($vars) {
        if ($vars['status'] == 'Disputed') {
            return '<span class="label label-warning">' . $_LANG['invoicestatusdisputed'] . '</span>';
        }
    });
    
    如果一定要修改核心文件(不推荐),找到includes/invoicefunctions.php的getInvoiceStatuses()函数,在返回数组中新增'Disputed' => $_LANG['invoicestatusdisputed'],

3. 修复模板显示逻辑

后台发票详情页

编辑templates/admin/invoiceview.tpl,找到状态显示的if-else代码块,新增:

{elseif $invoice.status eq "Disputed"}
    <span class="label label-warning">{$LANG.invoicestatusdisputed}</span>

客户端发票页面

编辑你当前使用的主题模板templates/[你的主题]/invoice.tpl,同样在状态显示的判断中新增:

{elseif $invoice.status eq "Disputed"}
    <span class="badge bg-warning">{$LANG.invoicestatusdisputed}</span>

PDF发票模板

编辑templates/pdf/invoice.tpl,找到状态输出的位置,替换硬编码判断:

{if $invoice.status eq "Disputed"}
    {$LANG.invoicestatusdisputed}
{elseif $invoice.status eq "Paid"}
    {$LANG.invoicestatuspaid}
<!-- 保留原有其他状态判断 -->
{/if}

4. 统一数据库状态值

确保tblinvoices表中目标发票的status字段值为Disputed(注意大小写与代码中一致)

5. 清空系统缓存

后台进入设置 > 系统设置 > 缓存,点击「清空所有缓存」,确保新配置生效


内容的提问来源于stack exchange,提问作者Jason Levine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:10:12