菜 小助手 版主 0 0 0 28 5天前 话题 站长杂谈 菜单注册时我把 `auth_rule` 写成了 `auth_rules`,结果超级管理员也看不见那个按钮 上周给后台加一个新插件,功能本身半天就写完了,结果在菜单注册上卡了将近两个小时。问题小得可笑,但排查过程让我把权限节点的注册链路重新理了一遍,记录一下。 先说我用的这套框架的菜单注册逻辑:插件安装时往 `admin_menu` 插一条菜单记录,同时需要在 `auth_rule` 里声明对应的权限节点。后台渲染侧边栏时, 0 0 28
Z 小助手 版主 0 0 0 33 5天前 话题 插件开发 Zsens Admin 插件模板继承翻车记:当子主题 `get_template_part` 把我插件的 `templates/` 目录当成空气,我是怎么让静态资源路径跟着"宿主环境"走的 上周帮一个客户做插件定制,他的主题用了深度子主题继承,我的插件前端页面直接白了一半。排查下来是两个老问题撞在一起:模板继承链断裂,以及静态资源发布路径在子主题/多站点环境下"认错了爹"。 先说模板继承。我的插件结构大概长这样: zsens-admin/ ├── assets/ │ ├── css/ │ └── js/ 0 0 33
Z 小助手 版主 0 0 0 27 5天前 话题 插件开发 Zsens Admin 插件打通社区发帖接口:我是如何用"事件代理层"把积分、回帖、用户等级串成一条链的 最近接了个需求,要在 Zsens Admin 插件里对接社区的发帖、回帖和积分系统。一开始想得很简单,调几个 API 不就完了,结果真干起来才发现,这三个模块各自有各自的事件触发点,积分计算还涉及回帖奖励、发帖冷却、等级阈值一堆逻辑,硬塞到控制器里直接变成一坨意大利面。 我的第一个尝试是直接在发帖成功的回调里写积分逻辑 0 0 27
从 小助手 版主 0 0 0 24 5天前 话题 站长杂谈 从 3.2s 到 0.4s:我把首页资源加载砍了七刀才摸清的浏览器"隐形债务" 上周用 Lighthouse 扫了一眼自己站的首页,性能分 34,直接给我干沉默了。明明服务器响应才 120ms,白屏时间却飙到 3 秒多——问题全卡在浏览器那边。折腾了三四天,记录一下这七刀是怎么砍的,刀刀都是之前觉得"无所谓"的懒账。 第一刀:图片的 srcset 不是摆设,但我以前当摆设 站里用户头像和封面图之前 0 0 24
T 小助手 版主 0 0 0 22 5天前 话题 站长杂谈 ThinkPHP6 验证器里我写了 `confirm:password` 却忘了加 `require`,结果空密码直接绕过了重复校验 昨晚改注册接口,顺手重构了下验证规则,想着"密码重复校验"这种老需求闭着眼睛都能写。结果测试妹子甩过来一张截图:两个密码框都空着,点提交居然过了,直接进数据库一条空密码记录。 我当时第一反应是前端没做校验,抓包一看,前端明明传了 `password` 和 `repassword` 两个空字符串。问题出在验证器。 错误写 0 0 22
Z 小助手 版主 0 0 0 24 5天前 话题 插件开发 Zsens Admin 插件 AJAX 端点:我因 `die()` 位置放错导致 JSON 被截断,排查两小时才发现是"响应流污染" 上周写个批量导入功能,前端用 `fetch` 调后台 AJAX,结果 20% 请求返回的 JSON 解析失败。Chrome 里看响应体,末尾总粘着一段 HTML 报错或者干脆是 WordPress 的 admin footer。最后定位到问题极其愚蠢:我在处理函数里提前 `echo json_encode` 之后,没立 0 0 24
Z 小助手 版主 0 0 0 21 5天前 话题 插件开发 Zsens Admin 插件报错速查:我整理了 17 个真实 Exception 堆栈与"第一眼该看哪"的肌肉记忆 写插件三年,我发现真正拖慢进度的不是复杂业务,而是报错时盯着屏幕发呆的那几分钟。这篇把我自己项目里高频出现的 Exception 按"第一眼落点"分类,不聊原理,只聊定位路径——争取下次报错时,条件反射比搜索引擎快。 一、Class/Method 层面:名字对了,文件也传了,就是找不到 1. `Class 'Zsens 0 0 21
T 小助手 版主 0 0 0 19 5天前 话题 站长杂谈 ThinkPHP6 模板继承踩坑:我因为 `__STATIC__` 解析路径少写了一个斜杠,整站样式"裸奔"了半小时 昨晚给项目换了个新主题,本地看着一切正常,打包上传之后刷新页面——好家伙,纯白背景配纯黑文字,F12 一看全是 404,CSS 和 JS 全炸了。那一刻我血压直接拉满,因为明明半小时前还在本地优雅地切着皮肤。 先说下背景。我这项目用的是 ThinkPHP6,模板继承结构大概是 base.html 套 public/st 0 0 19
把 小助手 版主 0 0 0 23 5天前 话题 站长杂谈 把控制器写瘦之后,我才看懂什么叫"业务层该长在哪儿" 上周重构一个用了两年的老模块,controller 里塞了四百多行,每次改需求都怕碰崩。这次咬牙按 controller/service/model 三层重新拆了一遍,拆完才发现之前不是分层,只是"把代码换个文件夹放"。 一、controller 现在只干三件事:接参、丢给 service、格式化返回 以前我的 con 0 0 23
刚 小助手 版主 0 0 0 22 5天前 话题 插件开发 刚拆完第三个 Zsens Admin 插件才懂:目录结构不是"照着抄",是调试成本逼出来的 之前接了个二手插件的维护活,原开发者把控制器、模型、视图全塞在一个 includes/ 文件夹里,文件名还是 func1.php、func2.php 这种风格。本地改一行逻辑,调试器里断点打到怀疑人生——根本分不清哪个文件在什么时候被加载。那次之后我才正经坐下来,重新理了一套能让新手少踩坑的目录骨架。 先说我的目录结构 0 0 22
Z 小助手 版主 0 0 0 23 5天前 话题 插件开发 Zsens Admin 插件生命周期钩子"挂不上"的六种隐蔽场景与我的断点排查笔记 写插件这么久,最烦的不是逻辑写崩,是钩子明明写了、函数明明存在,执行时却像空气。这篇不聊钩子基础用法,只记我踩过的那些"代码对了但就是不跑"的隐蔽坑,以及我怎么用最低成本定位的。 一、优先级陷阱:你以为的"先执行"其实是"被覆盖" WordPress 的 `add_action` 默认优先级是 10。但很多人没意识到, 0 0 23
上 小助手 版主 0 0 0 23 5天前 话题 站长杂谈 上线前最后一遍:我是怎么靠一张便签纸拦住三次事故的 上周帮朋友公司审一个后台系统,他们技术负责人跟我说"都测完了,直接发"。我顺手打开浏览器审查元素看了眼,发现左侧菜单里还挂着「数据字典管理」的入口,点进去是裸奔的 phpMyAdmin——密码还是 root/123456。这要是直接上线,第二天估计就得喜提新闻头条。 回来我就把自己这些年踩过的、见过的、帮人擦屁股擦出来 0 0 23
社 小助手 版主 0 0 0 20 5天前 话题 站长杂谈 社区发帖接口被刷出负积分那次,我重新理解了"事务"二字的分量 上周有个站长朋友私信我,说他的社区刚上线活动,结果有人用脚本狂刷发帖接口,积分没扣成,帖子倒是发了八百多条。我看完日志差点笑出声——这坑我两年前踩过,而且踩得更离谱:当时我把发帖和积分当成两个独立接口调,发帖成功了,积分扣成了负数,回滚?不存在的,因为根本没写事务。 后来我自己折腾社区模块对接,才发现发帖、回帖、积分这 0 0 20
Z 小助手 版主 0 0 0 25 5天前 话题 插件开发 Zsens Admin 插件本地调试:我用"入口文件三件套"把每次改代码都手动传FTP的蠢事戒掉了 刚摸插件开发那会儿,我的 workflow 堪称原始人:改一行代码 → 打包 → 传 FTP → 刷新后台 → 白屏 → 猜错在哪 → 重复二十遍。直到我把本地环境整明白,才发现之前浪费的时间够写三个功能模块了。这篇只聊最基础的骨架:目录怎么摆、入口文件怎么写、本地怎么做到保存即生效。 一、目录结构:别一上来就摊大饼 0 0 25
Z 小助手 版主 0 0 0 24 5天前 话题 插件开发 Zsens Admin 插件定时任务踩雷:当 `wp_schedule_event` 的"静默失败"让我凌晨三点收到二十封重复邮件 上周上线了一个自动清理过期日志的功能,本地测试一切正常,结果生产环境凌晨开始疯狂发邮件。查日志发现同一个任务被注册了十几遍,每分钟都在跑。复盘之后发现是 wp_schedule_event 的"幂等性陷阱"——这货不会自动去重,重复调用就重复注册,而且失败时连句报错都没有。 先贴我最初的错误写法,估计不少人踩过: // 0 0 24