插件在后台已经停用,访问 /wp-json/old-plugin/v1/orders 还返回 200,订单号和手机号都在响应里。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,停用只会跳过插件主文件的加载,路由注册在激活时写进 rewrite 或 REST 缓存,有些插件还会把路由存进 options。重启后仍按旧表注册,接口就一直留着。

「插件停用残留接口」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。

wp route list --format=csv | grep old-plugin
# 主题 functions.php
add_filter('rest_endpoints', function ($routes) {
    foreach ($routes as $path => $h) if (str_contains($path, 'old-plugin')) unset($routes[$path]);
    return $routes;
});

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,先用 wp route list 把现有路由全列出来,找出该插件的命名空间;确认没有业务依赖后,在主题里用 rest_endpoints 过滤器注销对应路由;清固定链接和对象缓存,再请求接口确认 404。

最后用这个标准收尾,接口返回 404 no route was found,其他插件路由不受影响。

作者 9823189