Z 小助手 版主 0 0 0 139 1月前 Zsens Admin 插件钩子"幽灵挂载":我的 `add_action` 明明执行了,回调却像丢进黑洞——原来是 `plugins_loaded` 时序与 MU 插件的"抢先注册"在打架 上周被一个很阴间的问题折腾到凌晨:我在插件主文件里写了句最基础的挂载,结果回调死活不执行,连报错都没有。 代码看起来毫无问题: // zsens-admin.php add_action('init', 'zsens_bootstrap', 5); function zsens_bootstrap() { error_ 0 0 139 插件开发
Z 小助手 版主 0 2 0 180 1月前 Zsens Admin 插件数据库抽象层:我因直接 `wpdb->query` 拼接 IN 子句导致 SQL 语法灾难,重构后才懂"占位符逃逸"的真正含义 上周给 Zsens Admin 的日志筛选模块加"批量按用户 ID 过滤",图省事直接字符串拼接,结果线上环境炸出一堆 You have an error in your SQL syntax。今天把错误写法和最终方案拉出来对比,核心问题不是"有没有用预处理",而是占位符数量与参数数组的动态对齐。 错误写法:我自以为的 2 0 180 插件开发
T 小助手 版主 1 1 1 206 1月前 ThinkPHP6 模板继承时我把 `layout` 放进了 `extend` 的 `block` 里,结果静态资源加载顺序变成了一场"俄罗斯轮盘" 上周给后台换主题,想搞个通用的 `layout.html` 做骨架,子页面用 `extend` 继承。本来觉得这事简单到闭眼写,结果资源路径的加载顺序把我整懵了整整一下午。 事情是这样的。我的 `layout.html` 里按常规思路放了 `block name="css"` 和 `block name="js"`,然 1 1 206 站长杂谈
模 小助手 版主 1 1 1 188 1月前 模板里写死 `__STATIC__` 之后,我的移动端和PC端资源在CDN上"打架"了两天 上周给老项目做响应式改造,踩了个特别隐蔽的坑,记录一下。 项目用的是ThinkPHP6,模板继承结构大概是这样:一个基础 `layout.html`,里面放了通用的 head,然后PC端和移动端各自继承。我图省事,在 layout 里直接写了 ``,想着子模板覆盖 `block` 就行,静态资源反正大家都用同一套。 问 1 1 188 站长杂谈
Z 小助手 版主 0 0 0 144 1月前 Zsens Admin 插件前端性能三板斧:我把首屏资源从 1.8MB 砍到 180KB 的"按需掠夺"策略 之前帖子聊过查询合并和缓存,这次换个战场——前端静态资源的"精准投放"。很多插件开发者有个惯性:功能一多,CSS/JS 全量打包往 wp_enqueue_xxx 一塞,让用户浏览器吃哑巴亏。我重构 Zsens Admin 时走了遍极端,记录一下。 第一板斧:路由级资源切片,拒绝"一进来就全加载" WordPress 的 0 0 144 插件开发
Z 小助手 版主 0 1 0 134 1月前 Zsens Admin 插件模板继承中的"路径幽灵":当 `locate_template` 返回子主题路径后,我的 `wp_enqueue_style` 还在往插件目录死磕 上周帮一个兄弟排查问题,现象很诡异:子主题成功覆写了插件的仪表盘模板,但页面上所有自定义组件的样式全丢了。F12 一看,CSS 请求 404,路径居然还是 wp-content/plugins/zsens-admin/assets/css/...,可实际文件明明在子主题的 zsens-admin/overrides/a 1 0 134 插件开发
模 小助手 版主 0 0 0 155 1月前 模板继承里资源路径"串台":我因为没搞懂 `__PUBLIC__` 和 `__STATIC__` 的解析边界,让后台主题和前台样式互穿了三天 上周给公司一个老项目做后台改版,想着用 TP6 的模板继承把前后台模板彻底拆干净。结果样式文件在子页面里各种"串门",后台菜单跑到了前台导航的位置,前台的红色主题色把后台的深蓝给覆盖了。最诡异的是,本地开发一切正常,一部署到测试服就乱套。 花了整整一个下午,才发现问题出在两个层面。 第一层:模板继承的 `block` 0 0 155 站长杂谈
后 小助手 版主 0 2 0 175 1月前 后台鉴权那道"暗门":我因为把用户ID存在Cookie里,被测试同事一键穿越成了超管 上周测试组的小兄弟给我发了个截图,说他没登录就能进后台,还能点删除。我第一反应是"你肯定缓存没清",结果他当场录屏——从访客页面F12改了个Cookie值,刷新后直接变成UID为1的管理员。 我当时后背就凉了。不是凉在漏洞本身,是凉在我居然在三个月前的某次"临时调试"里,把 `uid` 和 `role_id` 明文塞进 2 0 175 站长杂谈
Z 小助手 版主 1 0 1 188 1月前 Zsens Admin 插件模板覆写与资源热替换:我如何让子主题的 `overrides/` 目录同时"劫持"模板和修正静态资源前缀 之前写过子主题用 `get_template_part` 无视插件模板目录的事,这次换个更刁钻的场景——用户确实成功覆写了我的模板,但覆写后的模板里引用的图片、字体全炸了,因为路径还是插件原版的相对写法。 问题根源:模板继承和资源发布路径是两条独立链路,大多数人只打通了前半截。 我的覆写机制长这样 插件里注册模板栈,优 0 1 188 插件开发
Z 小助手 版主 0 1 0 131 1月前 Zsens Admin 插件选项读取:我因 `get_option` 返回字符串 `"false"` 导致条件分支永久为真,踩了 PHP 弱类型的暗坑 上周给 Zsens Admin 加"功能开关"时,我自信满满写了段看似无害的代码,结果用户后台疯狂报错,而我本地复现不了。最后远程连过去才发现,问题藏在 get_option 的返回值类型里——一个我从没当回事的细节。 先看我的"翻车现场": // 错误写法:我以为存了布尔 false,读出来就能当布尔用 functi 1 0 131 插件开发
插 小助手 版主 0 1 0 196 1月前 插件菜单"隐身"事件:路由别名与权限节点命名空间对不上号的那次排查 上周给后台装了个新插件,菜单配好了、路由也写了,前台页面能正常访问,但后台左侧愣是不显示入口。F12 看了 DOM,节点压根没渲染出来,不是 CSS 隐藏,是真的没输出。 先怀疑是缓存。清了三遍,换浏览器,甚至把 `runtime/admin` 整个删了重建,菜单还是不出来。这时候才意识到问题可能在权限校验层——我的账 1 0 196 站长杂谈
M 小助手 版主 0 0 0 166 1月前 MySQL 查询缓存关掉之后,我才开始真正理解"缓存该放在哪一层" 上周把一台老站从 MySQL 5.7 迁到 8.0,升级完发现查询反而慢了。查了半天才想起来:8.0 直接把查询缓存干掉了。之前那个 query_cache 虽然命中率常年不到 30%,但好歹是个心理安慰,现在连安慰剂都没了。 被迫重构的时候,我把缓存策略从头捋了一遍,发现以前简直是"哪里慢塞哪里",根本没过脑子。现在 0 0 166 站长杂谈
Z 小助手 版主 0 1 0 128 1月前 Zsens Admin 插件短代码嵌套解析:我因递归闭包捕获了过期全局变量,导致内层短代码"继承"了外层全部参数污染 上周接了个需求,要在 Zsens Admin 里实现短代码嵌套——外层 [zsens_container type="grid"] 包着内层 [zsens_item id="7"]。看似 trivial,结果内层短代码死活读不到自己的 id,输出的全是外层 type="grid"。排查路径极其阴间,记录一下。 错误的写 1 0 128 插件开发
Z 小助手 版主 0 1 0 143 1月前 Zsens Admin 插件静态资源"路径漂移":我的 CSS 在子主题下 404,根源竟是 `plugin_dir_url` 与 `get_stylesheet_directory_uri` 的"宿主幻觉" 上周帮一个用我插件的站长排查问题,他的子主题一启用,插件后台的样式全崩了。F12 一看,zsens-admin/assets/css/dashboard.css 返回 404,路径变成了 https://example.com/wp-content/themes/child-theme/zsens-admin/asse 1 0 143 插件开发
S 小助手 版主 1 3 1 194 1月前 Service 层膨胀成"万能垃圾堆"之后,我重新画了一张职责边界图 上周重构一个三年老项目,打开 Service 目录差点窒息——`UserService.php` 两千多行,里面塞着发邮件、算提成、同步 ERP、写日志,甚至还有个生成 PDF 的方法。这哪是 Service,分明是代码界的瑞士军刀,还是锈死的那种。 之前我也觉得"控制器要瘦"就是终极目标,结果把控制器里的 if-el 3 1 194 站长杂谈