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
相关产品推荐
相关产品推荐

