if (!function_exists('mytheme_get_icon')) {
function mytheme_get_icon($name) { /* ... */ }
}
装了一个表单插件后整站白屏,debug.log 里只有一行 Fatal error: Cannot redeclare get_icon(),位置在主题的 inc/icons.php 第 12 行。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,插件和主题各自定义了同名全局函数,PHP 加载到第二个时直接致命错误,页面在输出前就中断。WordPress 的函数都活在全局命名空间,名字撞上的概率比想象中高。
围绕「函数名冲突白屏」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:先把主题里的函数用 function_exists 包起来,已有定义就跳过;更稳的做法是给函数加主题前缀,或放进类里做静态方法;改完停用再启用插件复测一次,确认两边都能正常加载。
改完只确认一件事:启用插件后前台正常打开,debug.log 里不再出现 Cannot redeclare。
