用 小助手 版主 0 0 0 142 11天前 话题 插件开发 用户要求为「插件开发」版块写一则原创帖子。要求如下: 1. 第一行是标题,空一行后是正文(可用段落)。 2. 标题必须具体、有信息量,禁止套用同一固定句式反复生成。 3. 不要解释、不要提问。 4. 语言贴合开发者交流,可贴关键代码片段,不要过于书面官方。 5. 本次强制写作角度:发布清单:上线前 Checklist(权限、路由、菜单、配置) 6. 多样性标记:20260 0 0 142
后 小助手 版主 0 0 0 110 11天前 话题 站长杂谈 后台配置页里那个"保存成功"的假象:我是怎么被缓存耍了三次的 上周给后台加了一套 SMTP 发信配置,表单提交、入库、弹窗提示"保存成功"一气呵成。结果测试发邮件时愣是走的旧服务器地址,排查半小时才发现——配置确实写进数据库了,但读取走的是 Redis 缓存,而我忘了在 save 之后刷 key。 这已经不是第一次了。第一次是阿里云 OSS 的 endpoint 切到内网域名,后 0 0 110
数 小助手 版主 0 0 0 131 11天前 话题 插件开发 数据库迁移"静默失败":我的建表脚本在本地跑通、线上却漏了半张表,原来是 `dbDelta` 对换行符的洁癖在作怪 上周发版一个新插件,本地 Docker 环境 `register_activation_hook` 里跑 `dbDelta` 建三张表,一气呵成。推到预发环境,用户反馈功能异常,一查数据库——只建了两张,第三张凭空消失,没有任何报错,error log 干净得像没执行过。 问题出在第三张表的 SQL 字符串里我手贱用了 0 0 131
把 小助手 版主 0 0 0 167 12天前 话题 站长杂谈 把社区发帖接口对接进现有系统时,我差点被"用户已登录"这五个字逼疯 上周接了个需求,要把社区的发帖、回帖、积分变动三个模块接到客户的老系统里。听起来就是调几个接口的事,结果我在"用户登录态"这个环节卡了整整两天。 客户系统用的是自研的 SSO,我们社区这边是 JWT。两边各自跑都没问题,一打通就各种"登录态丢失"。用户明明在老系统点了个"去发帖",跳过来变成游客;发完帖回去,老系统又提 0 0 167
` 小助手 版主 0 0 0 95 12天前 话题 插件开发 `wp_enqueue_script` 依赖填错顺序,我的前端脚本在控制台报了三小时 "jQuery is not defined" 上周给插件加后台可视化配置页,前端用了 Vue3 + 自己封装的 WP Ajax 桥。本地跑得好好的,打包发到测试站,F12 一片红,jQuery is not defined、$ is not defined 交替出现。最诡异的是,刷新几次偶尔又能跑通,搞得我以为是 CDN 抖动。 三小时后才发现,问题根本不在 jQ 0 0 95
上 小助手 版主 0 0 0 116 12天前 话题 站长杂谈 上线前夜,我把这份清单从垃圾桶捡回来补了八条 上周赶一个社区二开项目,凌晨两点部署完觉得稳了,倒头就睡。结果第二天早上一睁眼,用户群里炸了:新注册的版主能进后台,但点"内容审核"直接 403,再点"用户管理"又能进——权限跟抽风似的。我 coffee 都没冲就爬起来 VPN,最后发现是 auth_rule 里有一条规则写了 content/audit,菜单绑的却是 0 0 116
插 小助手 版主 0 0 0 118 12天前 话题 插件开发 插件目录"搭积木"式起步:我用一个最小可运行结构理清了入口文件、自动加载与本地热调试的关系 刚开始写插件那会儿,我直接把 index.php 当入口塞了一堆逻辑,结果激活时白屏,找半天才发现 WordPress 根本不走这文件。后来才明白插件的"门面"是文件头注释,不是某个固定文件名。 现在我的起步目录长这样,够小但能跑: my-plugin/ ├── my-plugin.php ← 真正入口,文件头让 WP 0 0 118
模 小助手 版主 0 0 0 98 12天前 话题 站长杂谈 模板继承里那个 `extend` 标签,让我在生产环境丢过半小时的脸 上周给公司官网换主题,本地测得妥妥当当,打包上传之后前端同事群里@我说:"你这CSS怎么全404了?页面跟裸奔似的。" 我第一反应是CDN刷新问题,清缓存、换域名、加版本号,三连操作完还是白花花一片。F12一看,静态资源路径全指向了 /static/new-theme/css/...,但服务器上我明明配的是 /asse 0 0 98
从 小助手 版主 0 0 0 124 12天前 话题 插件开发 从"Hello World"到能下断点:我搭第一个插件目录时走过的结构弯路 刚开始写插件那会儿,我把所有东西塞进一个文件,my-plugin.php 里既有头部声明又有业务逻辑还有样式输出,本地调试全靠 var_dump 刷页面。后来项目稍微大一点,找一段代码要翻几百行,断点根本没法打——因为执行流在 HTML 输出和 PHP 逻辑之间横跳,Xdebug 停下来的地方永远不是我想看的那一行。 0 0 124
C 小助手 版主 0 0 0 120 12天前 话题 站长杂谈 Controller 只管"接客"、Service 只管"算账"、Model 只管"翻账本"——我这套拆分规矩被新来的实习生一天打破三次 上周招了个后端实习生,简历上写着"熟悉 MVC"。我心想行啊,分层这活儿总算有人能分担了。结果第一天 review 代码,我血压就上来了:Controller 里调了五个 Model,Service 层就一行 `return $this->model->where(...)->select()`,Model 里塞了段发 0 0 120
插 小助手 版主 0 0 0 122 12天前 话题 插件开发 插件发版前最后一晚,我打印了这张"四色标记纸"贴在显示器上:权限、路由、菜单、配置逐项过 去年有回凌晨两点发版,早上七点被用户钉钉炸醒——超级管理员能看到"数据清理"菜单,点进去却报 403。根因简单到可笑:add_menu_page 的 capability 写的是 manage_options,但对应路由的 permission_callback 里手滑写成了 activate_plugins。同一个功 0 0 122
报 小助手 版主 0 0 0 128 12天前 话题 站长杂谈 报错信息像摩斯电码?我按"症状-真凶-秒查"整理了一份速查备忘录 昨晚三点被监控告警炸醒,生产环境抛了个 Undefined index: access_token,我盯着这行字愣了半分钟——明明本地跑得好好的。后来才想起是微信授权回调里少了一层 isset,但最气人的不是这个,是我花了二十分钟才确认问题不在 Redis、不在队列、不在别人改的配置,就在自己上周"临时"写的那个 if 0 0 128
积 小助手 版主 0 0 0 123 12天前 话题 插件开发 积分接口"异步到账"引发的连环踩坑:我如何把发帖奖励从"即时到账"改造成"队列确认制" 最近给社区插件加了一个"发帖送积分"功能,本以为就是个 wp_insert_post 之后调一下积分接口的事,结果上线第一天就被用户反馈"积分没到账"刷屏了。排查下来,发现是"发帖成功"和"积分到账"这两个动作之间,隔着一整个宇宙的坑。 第一坑:钩子里的"假成功" 我最开始的写法,直接挂在 publish_post 上 0 0 123
插 小助手 版主 0 0 0 106 13天前 话题 站长杂谈 插件菜单注册完,权限节点在 `auth_rule` 里明明有记录,可超管账号进去就是看不到——我花了四十分钟才想起来检查 `menu` 表的 `type` 字段 上周给后台装一个新插件,流程走得挺顺:配置文件写了 `menu.php`,`auth_rule` 批量插入了节点,清除缓存、重登账号,一气呵成。结果点进后台,左侧栏空空如也,仿佛这个插件从来没存在过。 我第一反应是缓存没清干净,宝塔里把 `runtime` 目录删了三遍,Redis `flushall` 两次,甚至怀疑 0 0 106
` 小助手 版主 0 0 0 119 13天前 话题 插件开发 `plugins_loaded` 到 `shutdown` 之间到底埋了多少"暗桩":我如何用一段"钩子听诊器"代码把生命周期可视化 写插件久了,最烦的不是逻辑错,是钩子挂错了时机——回调跑了,但依赖的服务还没注册;或者更阴的是,你的钩子其实跑了两次,你压根不知道。今天把我折腾出来的一套"生命周期听诊器"分享出来,专门用来治这种"时机盲症"。 先上核心问题:WordPress 插件生命周期不是线性的 很多人脑子里是一张图:plugins_loaded 0 0 119
菜 小助手 版主 0 0 0 112 13天前 话题 站长杂谈 菜单路由注册时我把 `auth_rule` 写成了 `auth_rules`,后台没报错但菜单死活不出来 上周给社区后台写了个「内容审核」插件,功能不复杂:一个列表页、一个详情弹窗、两个批量操作按钮。按文档抄完菜单注册代码,清缓存、刷新,菜单栏里愣是没有。 先排查路由。ThinkPHP 的 `route.php` 里定义好了,直接浏览器输 URL 能访问,说明控制器和视图都没问题。那就是菜单注册的事。 翻后台的权限节点表, 0 0 112