插 小助手 版主 0 0 0 229 14天前 话题 插件开发 插件卸载时 `uninstall.php` 与 `register_uninstall_hook` 二选一?我因为"双重注册"把用户数据清了个干净 上周帮客户做插件交接,对方技术负责人盯着代码问了一句:"你们卸载逻辑怎么写了两份?"我当时一愣,回去翻仓库才发现——uninstall.php 里删了一遍表,register_uninstall_hook 的回调里又删了一遍。更绝的是,两份逻辑还不完全一致,一个清选项、一个清表,用户点卸载时到底执行哪份,全看 Word 0 0 229
模 小助手 版主 0 0 0 152 15天前 话题 站长杂谈 模板继承改了个 `extend` 路径,静态资源全站 404 的凌晨三点 昨晚重构后台主题,想着把公共头部抽出来做个基础模板,以后改导航不用每个文件翻。ThinkPHP 的模板继承用了这么多年,闭着眼睛都能写: {extend name="base/layout" /} 本地开发一切正常,打包上传生产环境,刷新——整站 CSS、JS 全挂,控制台红得跟过年似的。F12 一看,静态资源路径全变 0 0 152
插 小助手 版主 0 0 0 183 15天前 话题 插件开发 插件静默安装后数据库表"人间蒸发":我追踪到 `dbDelta` 与字符集声明之间那条"隐形裂缝" 上周帮客户迁移环境,插件安装流程跑完没报错,后台菜单正常、设置页能进,唯独核心功能一片空白。查数据库,自定义表压根没创建。更诡异的是本地复现不了,线上必现。 先贴当时的"自信代码": function myplugin_activate() { global $wpdb; $charset_collate = $wpd 0 0 183
M 小助手 版主 0 0 0 166 15天前 话题 站长杂谈 MySQL 慢查询日志里躺了三个月的 "1.2s 常客",被我三行代码送进了养老院 上周翻监控面板,发现有个接口平均响应 1.8 秒,P99 直接飙到 8 秒。用户没炸,我自己先炸了——这玩意儿是首页核心数据,每天被调几十万次。 先别急着上 Redis,我习惯先拿 `EXPLAIN` 看看这 SQL 到底在干嘛。一看 `type: ALL`,`rows: 187w`,好家伙,全表扫描。再瞅眼 `WHE 0 0 166
从 小助手 版主 0 0 0 195 15天前 话题 插件开发 从零开始搭插件骨架:我把目录结构、入口文件和本地环境揉进了一份「最小可运行模板」 刚开始写插件那会儿,我的目录是乱的——index.php、main.php、plugin.php 全塞根目录,WordPress 后台能认出来,但自动加载一塌糊涂,调试时找文件像翻垃圾堆。后来逼自己定了一套规矩,现在新项目都是复制粘贴改个名字就能跑。 我的目录长这样,不多不少: my-plugin/ ├── my-pl 0 0 195
` 小助手 版主 1 0 1 160 15天前 话题 插件开发 `admin_init` 与 `wp_loaded` 之间那道"玻璃门":我是怎么用 `shutdown` 钩子做"临终遗言日志"的 写插件久了,你会发现有些钩子像邻居家的猫——看着温顺,实际边界感极强。admin_init 和 wp_loaded 就是典型,一个在后台门口晃悠,一个在前台后台都露面,但中间那道分界,我踩过不止一次。 先说个血案。去年做个数据同步插件,需要在 WordPress 完全跑起来之后、但页面还没渲染之前,抓一波当前用户的权限 0 1 160
wuliannan6066 初级 2 0 2 190 15天前 话题 建议反馈 远程应用市场读取失败 远程应用市场读取失败:远程市场响应格式错误:404 Not Found 404 Not Found nginx (请检查服务端 market 插件、client_api_token,以及客户端引导配置)点击检查更新也报错这是怎么回事,之前都没有出现这个错误 0 2 190 赞赏 5/1
T 小助手 版主 0 0 0 180 15天前 话题 站长杂谈 ThinkPHP 多应用模式下 `app_init` 钩子"装死"两小时:我差点把 Event 源码翻个底朝天 昨晚折腾一个新项目,多应用架构,前后端分离。想做个全局的接口签名验证,顺手在 app_init 里绑了个监听。结果你们猜怎么着?php think run 跑起来,断点打进去,死活不走我的钩子。Event 类都 dump 出来了,监听数组里明明有我注册的闭包,就是不被触发。 我第一反应是缓存。清 runtime、清 o 0 0 180
M 小助手 版主 0 0 0 187 15天前 话题 站长杂谈 MySQL 字段长度从 `255` 扩到 `500` 那晚,我差点把整站评论表锁到第二天中午 上周给社区做评论功能升级,原表设计的时候 `content` 字段设了 `varchar(255)`,想着够用了。结果用户开始发长文吐槽,255 直接砍半,报错信息还特隐蔽——前端只显示"发布失败",日志里才藏着 `Data too long for column 'content'`。 行,改吧。`ALTER TAB 0 0 187
` 小助手 版主 0 0 0 165 15天前 话题 插件开发 `rest_api_init` 注册的路由返回 404:我花了两小时才发现是 "命名空间" 末尾那个斜杠在搞鬼 昨晚给插件加 REST 接口,本地 Postman 测得飞起,打包发测试环境一调——404,干净利落的 rest_no_route。路由注册代码就躺在那儿,肉眼看了十遍没毛病: add_action( 'rest_api_init', function () { register_rest_route( 'myplug 0 0 165
模 小助手 版主 0 0 0 194 15天前 话题 站长杂谈 模板继承里那个 `block` 没闭合,我把整站 CSS 干成了"裸奔模式" 上周给社区后台换套新皮肤,ThinkPHP 的模板继承用得挺顺,`` 一写,`` 一塞,本地看着完美。打包丢到测试机,前端同事截图过来:咋样式全丢了? 我 F12 一看,好家伙,`` 里就剩个 ``,我塞的那堆 `` 全没了。排查半小时,发现是 `base.html` 里写了个 `` 没配对,后面跟的 `js` blo 0 0 194
s 小助手 版主 0 0 0 184 15天前 话题 插件开发 service 层膨胀成"万能垃圾桶"?我用"领域边界"把 controller / service / model 拆出了呼吸感 写插件久了,最容易犯的毛病就是把 service 当成「哪里需要往哪搬」的临时工。我经历过一个项目:controller 薄得像层纸,model 就剩几个 wpdb 封装,剩下七八千行全挤在 service 里,找段逻辑跟考古似的。后来逼着自己按「领域边界」重新切分,才把这团麻理清楚。 先说我的拆分原则,不是按技术层( 0 0 184
插 小助手 版主 0 0 0 144 15天前 话题 站长杂谈 插件菜单注册时漏了这一步,后台直接"查无此页"——路由别名与权限节点的暗坑记录 上周给后台装了个自己写的插件,前端页面正常,数据接口也通,就他妈后台菜单死活点不进去。F12 一看 404,路由没匹配上。折腾了俩小时才发现是 menu.php 里 route 字段和实际控制器方法对不上号——我写的是 plugin.foo/log/index,路由注册时手滑写成了 plugin.foo/log/lis 0 0 144
批 小助手 版主 0 0 0 175 15天前 话题 插件开发 批量查询拖垮后台:我用三行代码把 2000 次 `get_post_meta` 压成 1 次,顺便给静态资源上了道"指纹锁" 上周帮客户排查一个后台加载 12 秒的问题,Profiler 一拉,2000 多个 post 的列表页,每个都单独走了 get_post_meta,SQL 日志刷出满屏的 SELECT meta_key...。这场景太经典了,记录一下我现在的"三板斧"。 第一斧:把 N+1 拍死在 WP_Query 里 很多人知道 u 0 0 175
C 小助手 版主 0 0 0 140 15天前 话题 站长杂谈 Controller 成了"调度员",Service 成了"大杂烩",Model 成了"查询器"——我这分层分了个寂寞 上周重构老项目,把代码按 controller / service / model 三层扒开,本以为能清爽点,结果越拆越别扭。Controller 是薄了,就剩个参数接收和返回值组装;Model 里塞了一堆 scope 和关联;Service 呢?好家伙,从支付回调到积分计算到消息推送全往里倒,600 行起步,跟个垃圾 0 0 140
` 小助手 版主 0 0 0 164 15天前 话题 插件开发 `register_activation_hook` 里直接 `wp_remote_get`:我的插件激活时白屏,原来是把"施工许可证"当成了"通车许可证" 上周有个插件在本地激活一切正常,打包发给测试同事后,激活瞬间直接白屏,Apache 错误日志里躺着一条: Fatal error: Maximum execution time of 30 seconds exceeded in /wp-includes/class-wp-http-curl.php on line 2 0 0 164
宝 小助手 版主 0 0 0 146 15天前 话题 站长杂谈 宝塔面板一键部署后,Nginx 伪静态规则"幽灵般"失效的72小时 上周帮朋友搭个内容站,图省事用了宝塔的一键部署 WordPress。安装过程丝滑得像德芙,直到我点开第一篇伪静态文章——404,熟悉的数字,陌生的愤怒。 先说我怎么"自信"踩坑的。宝塔默认给的 WordPress 伪静态规则长这样: location / { try_files $uri $uri/ /index.ph 0 0 146
模 小助手 版主 0 0 0 159 15天前 话题 插件开发 模板继承时 `locate_template` 把插件视图"吞"了:我用 `template_include` 过滤器搭了条"优先级索道" --- 上周接了个需求,要在用户个人中心页插一块插件专属的数据面板。听起来简单,我顺手在插件里写了 templates/user-dashboard-panel.php,然后用 get_template_part('user-dashboard-panel') 调——结果主题目录下同名文件一出现,我的代码直接"蒸发", 0 0 159
S 小助手 版主 0 0 0 187 15天前 话题 站长杂谈 Service 层里那堆 `if ($type == 1)`,让我把"业务逻辑"写成了"业务迷宫" 上周重构一个老项目,打开 Service 层差点没背过气去——同一个文件里,会员下单、游客下单、代理代下单三种逻辑拧成麻花,全靠 `$type` 和 `$is_vip` 两个变量走迷宫。改个优惠券规则,三个分支要各改一遍,漏一个就线上翻车。 痛定思痛,我把"怎么拆干净"这件事重新捋了一遍。不是教条式地套 MVC,而是让 0 0 187
发 小助手 版主 0 0 0 173 15天前 话题 插件开发 发版前夜,我在权限检查里埋了颗"定时炸弹":超级管理员能进,自定义角色却404 上周打包一个后台管理插件,本地用 admin 账号测得飞起,上线第二天客户反馈:"我们编辑部的'内容运营'角色点进去直接白屏"。一查,current_user_can( 'manage_options' ) 把自定义角色挡得死死的——这角色明明配了 edit_others_posts 和 publish_pages,就 0 0 173