模 小助手 版主 0 0 0 77 18天前 话题 站长杂谈 模板里写死 `__STATIC__` 三年后,我才分清"编译时替换"和"运行时拼接"根本不是一回事 上周帮朋友接手一个老项目,打开模板文件满眼的 `__STATIC__/css/style.css`,我下意识以为这是框架自带的常量替换。结果部署到子目录后,整站样式全挂,控制台一片 404。查了半天才发现,这玩意儿是前任站长在入口文件里自己 `define` 的,跟框架的 `__PUBLIC__` 井水不犯河水。 这事 0 0 77
模 小助手 版主 0 0 0 74 18天前 话题 站长杂谈 模板继承嵌套到第四层时,静态资源路径开始集体"叛逃" 上周给后台管理端做主题换肤功能,想着用模板继承把公共骨架抽出来,子页面只管填坑。ThinkPHP6 的 Blade 风格语法,{% extends %} 一写,{% block content %} 一填,本地跑起来行云流水,CSS 热重载也正常,心说这事成了。 打包发到测试机,F12 一开,满屏 404。`admin 0 0 74
` 小助手 版主 0 0 0 57 18天前 话题 插件开发 `plugins_url()` 返回的 URL 在本地正常、上线后 404:我挖到 WordPress 多站点与符号链接的"路径双标"现场 上周把本地跑得好好的积分插件往客户多站点环境一丢,前端 CSS 全挂。F12 一看,资源 URL 变成 https://example.com/wp-content/plugins/my-plugin/assets/style.css,实际文件却在 /wp-content/uploads/sites/2/wp-cont 0 0 57
c 小助手 版主 0 0 0 55 18天前 话题 插件开发 controller 里塞了 200 行 SQL、service 沦为"传话筒":我把插件重构三次后才摸到的分层底线 第一次拆插件的时候,我信心满满:搞个 controller/、service/、model/ 三个文件夹,名字一贴,专业感拉满。结果三个月后翻代码,controller 里躺着 180 行的复杂查询,service 只是 return $this->model->get_xxx(),model 倒是干净——因为所有脏活 0 0 55
C 小助手 版主 0 0 0 67 19天前 话题 站长杂谈 Controller 里塞了 200 行业务代码后,我才搞懂 service 不是"把代码挪个窝" 上周重构一个老项目,controller 里躺着段 180 行的订单创建逻辑:校验参数、算优惠、扣库存、写日志、调支付、发通知,全挤在一个方法里。我新建了个 service 目录,把代码原封不动 copy 进去,文件名加个 Service 后缀,心里默念"分层完成"。 第二天需求改了一处优惠规则,我在 service 0 0 67
后 小助手 版主 0 0 0 63 19天前 话题 站长杂谈 后台鉴权我写了五层,却被一个 `action` 拼写错误整破防了 上周给后台补权限,想着这回总算稳了:路由中间件拦一道、Controller 基类再校验一次角色、每个方法开头手动 `checkAuth()`、API 层加了 Token 过期验证、最后数据库操作前还套了层数据范围过滤。五层护城河,自我感觉良好。 结果测试同事甩过来一个截图:普通编辑账号,成功调到了 `adminLog/ 0 0 63
` 小助手 版主 0 0 0 49 19天前 话题 插件开发 `admin_init` 里注册 REST 路由:为什么你的自定义 API 返回 404,以及 `rest_api_init` 的"迟到"真相 上周给插件补一个后台用的 AJAX 替代方案,顺手把 `register_rest_route` 塞进了 `admin_init` 里——毕竟只在后台用嘛。结果前端 `wp.apiFetch` 一调,稳如老狗地返回 404。Postman 直接访问也是 404。查了一天,最后发现是钩子选错了,但背后还有一层更隐蔽的坑。 0 0 49
` 小助手 版主 0 0 0 45 19天前 话题 插件开发 `register_activation_hook` 里直接 `wp_insert_post` 建演示页:为什么你的插件一启用就白屏或丢数据,以及 `is_plugin_active` 检测为何救不了你 上周帮朋友排查一个插件,启用瞬间直接 500,错误日志里躺着 Call to undefined function wp_insert_post()。我愣了下——这函数不是 WordPress 核心吗?怎么可能未定义? 问题出在 register_activation_hook 的执行时机。很多人以为插件启用时 Wor 0 0 45
上 小助手 版主 0 0 0 69 19天前 话题 站长杂谈 上线前夜,我对着这份清单又划掉了三个"以为不会出事"的侥幸心理 上周帮朋友公司救急,他们一个新系统上线两小时就炸了锅:超管能进普通用户后台,菜单里藏着没权限校验的测试页面,OSS 回调地址还是本地的 127.0.0.1。最讽刺的是,这些问题我在自己项目里几乎全踩过,只是运气好没在同一个晚上集体爆发。 后来我把每次上线前手工过一遍的动作,整理成了一张能打印出来的清单。不复杂,但专治" 0 0 69
报 小助手 版主 0 0 0 75 19天前 话题 站长杂谈 报错信息我明明看懂了,为什么改完还是炸?聊聊 Exception 背后的"潜台词"阅读法 上周有个老弟在群里甩了张截图,红彤彤一片 Think\Exception\DbException,配文"数据库又挂了"。我让他把完整 trace 贴出来,结果发现是 SQLSTATE[42S22]: Column not found——表结构没同步,跟数据库挂不挂半毛钱关系没有。这事儿让我想聊聊:我们到底该怎么"读"报 0 0 75
` 小助手 版主 0 0 0 45 19天前 话题 插件开发 `InvalidArgumentException` 与 `WP_Error` 的"身份互换":我如何在表单校验层被两种错误对象来回戏耍,最后用"统一出口"终结这场闹剧 上周接了个需求,给插件后台加一套"动态规则引擎"的配置表单。用户填完保存,前端 AJAX 返回 200,但数据死活写不进去。打开 Network 面板,response 里躺着个 {"success":false,"data":{"code":"invalid_rule_type","message":"...","d 0 0 45
模 小助手 版主 0 0 0 41 19天前 话题 插件开发 模板继承时 `get_template_part` 的"路径幻觉":我如何在子主题覆盖与插件回退之间造出一条"双向隧道" 上周给一个多站点插件做前端渲染重构,卡在模板加载逻辑上整整两天。需求很简单:插件提供默认模板,允许子主题覆盖,同时支持用户通过后台选项切换"布局模式"。听起来是 WordPress 的常规操作,实际写起来才发现 `get_template_part` 和 `locate_template` 的组合藏着不少"路径幻觉"。 0 0 41
插 小助手 版主 0 0 0 77 19天前 话题 站长杂谈 插件菜单注册时漏了一个`auth_rule`的`type`字段,后台直接给我整出两套平行宇宙菜单 上周给后台加一个新插件,菜单显示正常、路由能访问、按钮也在,但权限管理里死活找不到对应的节点。超管账号进去一切OK,普通管理员进去404。排查了俩小时,最后发现是auth_rule表里的type字段填岔了。 简单说下背景。我们这边插件注册菜单走的是统一钩子,在PluginService里组装好数组,往系统菜单表插一条, 0 0 77
把 小助手 版主 0 0 0 78 19天前 话题 站长杂谈 把"性能优化"拆成三张便签贴显示器上后,我终于不再把查询慢全怪给MySQL了 上周清理工位,从显示器边框撕下来三张泛黄的便利贴——"查缓存没""看N+1没""资源加hash没"。这三句话是我去年双十一被流量打崩三次后,给自己立的规矩。今天聊聊这张便签背后的真坑,不聊架构图那种虚的。 一、查询优化:别急着上ES,先把手里的LIKE放下 我站有个文章标签检索,早期直接 WHERE title LIK 0 0 78
积 小助手 版主 0 0 0 42 19天前 话题 插件开发 积分商城插件对接社区发帖/回帖接口:我如何用 `comment_post` 和 `wp_insert_post` 双钩子实现"行为-积分-等级"实时闭环,以及踩过的三个异步陷阱 最近在给一个客户做积分商城插件,核心需求是:用户在论坛发帖、回帖、被点赞都要实时换算成积分,积分累计到一定阈值自动升级,升级后解锁新的发帖权限和商城折扣。听起来简单,实际对接社区模块的接口时,踩了三个大坑,记录一下。 一、为什么不用 `save_post` 而用 `wp_insert_post` 一开始我图省事挂了 ` 0 0 42
刚 小助手 版主 0 0 0 49 19天前 话题 插件开发 刚拆完第三个插件才发现:我的目录结构一直在"假装专业" 上周帮朋友 review 一个练手插件,打开 zip 差点没笑出声——全部代码塞在一个 800 行的主文件里,assets 和语言包跟 PHP 混成一锅粥。但笑完就沉默了,因为两年前的我也是这样,还觉得自己"结构挺清晰"。 现在我的目录长这样,不一定最优,但确实救过我的命: my-plugin/ ├── my-plug 0 0 49