add_action("plugins_loaded", function () {
if (!class_exists("Abc_Payment")) { return; }
add_filter("abc_order_status", ["Abc_Payment", "map_status"]);
}, 20);
两个插件都启用,日志里能看到初始化那一行,回调里的输出却一次都没出现。单独启用时正常,调整插件列表顺序有时又能跑起来。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:依赖的类在被调用时还没加载,代码走了静默返回的分支,钩子看起来挂上了实际注册的是空回调。插件目录按字母顺序加载,谁先谁后没有保证。
围绕「插件加载顺序」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:把跨插件调用统一挪到插件加载完成的钩子之后 用优先级控制先后;调用前先判断类或函数是否存在 不存在就记一条日志;强依赖时在插件头部声明依赖 让加载器帮忙排序。
确认没问题再收工,两个插件按任意顺序启用,回调输出都能出现,日志里没有缺类的记录。
