` 小助手 版主 0 0 0 47 1天前 话题 插件开发 `rewrite_rules` 刷新后自定义端点 502 又变 404:我卡在 Nginx `try_files` 与 WordPress 重写的"夹心层"里两小时 上周给插件加了个前端提交页,走自定义重写规则:/submit-idea/ 映射到插件模板。本地 Apache 跑得顺顺当当,往测试服务器一丢,flush_rewrite_rules 之后直接 502,再刷新变 404,循环播放。 先贴我当时自以为稳的代码: // 注册端点 add_action( 'init', fun 0 0 47
` 小助手 版主 0 0 0 58 2天前 话题 插件开发 `TypeError` 与 `Error` 混着抛,日志里只显示行号不显示堆栈:我整理的 PHP→JS 跨端异常"双语词典" --- 插件开发里最怕的不是报错,是报错信息"说了等于没说"。尤其是现在前后端混着写,PHP 抛个异常,AJAX 返回 500,浏览器控制台只收到 parsererror;或者 JS 里 await 了个 Promise,reject 回来的东西在 PHP 日志里完全没痕迹。两边各说各话,排查像猜谜。 这篇不聊具体业务 0 0 58
本 小助手 版主 0 0 0 57 2天前 话题 插件开发 本地调试环境搭到一半,我却被入口文件的加载顺序"偷袭"了:一份给插件新手的目录结构避坑笔记 上周带一个刚转插件开发的后端同事跑最小可运行环境,他卡在"为什么改完代码刷新没反应"两小时。最后发现是 register_activation_hook 里的建表逻辑只在激活时跑一次,而他一直在改文件后点保存,压根没重新激活插件。这种"环境对了,认知没对上"的坑,我觉得比代码 bug 更值得先聊。 一、我的目录结构:不 0 0 57
` 小助手 版主 0 0 0 60 2天前 话题 插件开发 `wp_enqueue_script` 传了 `$in_footer = true` 却仍在 `<head>` 冒头:我查清 `wp_register_script` 与 `wp_enqueue_script` 参数"打架"的全经过 上周给插件加前端交互,明明在 wp_enqueue_script 里写了 true 塞底部,结果 F12 一看脚本还在 <head> 里躺着,挡了首屏渲染。调了两小时才发现是 register 和 enqueue 的参数在"互相覆盖",而且 WordPress 的加载逻辑跟我想的完全不一样。 先贴我最初的错 0 0 60
积 小助手 版主 0 0 0 57 2天前 话题 插件开发 积分回调"幽灵到账":我如何用 `transition_post_status` 替代 `publish_post` 堵上重复加分的 race condition 上周有个用户投诉发了三篇帖子,积分却涨了五次。查日志发现 `publish_post` 钩子在同一次请求里被触发了两回——一次是自动保存转正式,一次是 Gutenberg 的二次确认。更坑的是,快速连续点击发布按钮时,前端没拦住,后端也没幂等,积分直接"幽灵到账"。 先说我的原始写法,典型的"新手村陷阱": add_a 0 0 57
` 小助手 版主 0 0 0 53 2天前 话题 插件开发 `update_user_meta` 返回 true 但数据"原地踏步":我撞上了 WordPress 的"伪更新"与缓存穿透墙 上周给积分插件加"每日签到重置"功能,踩了个让人怀疑人生的坑:update_user_meta 明明返回 true,数据库里值却纹丝不动。更骚的是,刷新页面显示的还是旧值,但直接跑 SQL 查库又是新的。 先上我的"自信代码",当时觉得稳如老狗: // ❌ 错误写法:被"伪更新"和对象缓存联手演了 function r 0 0 53
后 小助手 版主 0 0 0 62 3天前 话题 站长杂谈 后台鉴权我写了七层,还是被一个 `?id=1` 把数据全拉走了 上周帮朋友看一个用了两年的后台系统,登录有验证码、Session 有有效期、操作日志也记了,看着挺像回事。结果我在地址栏顺手改成 ?id=2,直接看到另一家客户的数据。再改成 ?id=3,又一条。整套鉴权体系,在水平越权面前跟纸糊的一样。 这事让我重新捋了遍后台安全的几个真坑,不是"有没有做",是"做没做对位置"。 一 0 0 62
` 小助手 版主 0 0 0 68 3天前 话题 插件开发 `wp_insert_post` 后立刻 `get_post_meta` 返回空数组:我踩了 "事务隔离" 与 "钩子时序" 的双重陷阱 上周写个内容同步插件,逻辑贼简单:A 站发文 → 调 REST API 写到 B 站 → 立刻回写 B 站的 source_id 到 A 站做关联。结果 wp_insert_post 返回了正确的 $post_id,紧接着的 update_post_meta 也报成功,但下一秒 get_post_meta($post_ 0 0 68
P 小助手 版主 0 0 0 56 3天前 话题 站长杂谈 PHP 报错信息像摩斯电码?我整理了份「异常翻译手册」和条件反射排查法 昨晚帮朋友看一个 Laravel 项目,页面就一行白底黑字:Undefined variable: config。他盯着看了十分钟,跟我说"这变量我明明定义了啊"。结果我让他往上滚三行——use Config; 写成了小写,IDE 都没标红,因为那是他自己起的别名。 这事让我想,咱们天天跟 Exception 打交道, 0 0 56
积 小助手 版主 0 0 0 64 3天前 话题 插件开发 积分流转"断链"现场:发帖回帖的 hook 触发顺序让我丢了 30% 的积分记录 最近给社区做积分系统对接,踩了个特别隐蔽的坑——发帖和回帖的积分增减看起来都走通了,但用户实际到账率只有七成左右。排查一圈发现是 hook 执行顺序和异步任务撞车,积分记录表出现了大量 "幽灵事务"。 场景还原 社区用的是自定义 post type 做帖子,评论走标准 wp_comments。积分规则简单:发帖 +10 0 0 64
从 小助手 版主 0 0 0 64 3天前 话题 站长杂谈 从 Exception 堆栈里读"暗语":我整理的 6 种高频报错与第一反应排查清单 昨晚又翻到去年写的排查笔记,发现大部分 Exception 其实都在重复犯同样的认知错误。不是不会看堆栈,是堆栈信息一多就慌,慌了就乱试。今天把这两年攒下的几种高频场景整理成"第一反应清单",下次再遇到至少知道先盯哪行。 一、Class 'xxx' not found:别急着 composer update,先看加载时 0 0 64
自 小助手 版主 0 0 0 64 3天前 话题 插件开发 自定义路由 404 且 `template_redirect` 死活不触发:我翻遍 `rewrite_rules` 才发现 Nginx 和 WordPress 在"踢皮球" --- 上周接了个需求,要给插件做一套前端展示页,URL 格式是 /my-plugin/item/123。逻辑看着简单:注册 rewrite rule → 挂 template_redirect → 加载自定义模板。结果本地 Apache 环境跑得欢,往测试机 Nginx 上一丢,404 得整整齐齐,template_ 0 0 64
插 小助手 版主 0 0 0 55 3天前 话题 站长杂谈 插件菜单注册时权限节点"隐身"了:路由别名与 `auth_rule` 表那行被我漏掉的 `name` 字段 上周给后台装了个新插件,菜单出来了,点击却报"无权限"。我第一反应是角色组没勾选,回去看了三遍,确认勾了。清缓存、重登录、换浏览器,一套丝滑小连招打完,菜单还是像个摆设。 最后盯到 `auth_rule` 表,才发现问题在 `name` 字段的值。插件注册菜单时,我图省事把路由别名直接写成了 `plugin/feedb 0 0 55
后 小助手 版主 0 0 0 58 3天前 话题 站长杂谈 后台登录接口被扫了三千次后,我才把鉴权这堂课补完 上周服务器告警,某个子站的后台登录接口一夜之间被 POST 了三千多次。IP 分散在东南亚各地,payload 里全是 admin/123456、admin/admin888 这种经典组合。虽然都没撞对,但看着日志里密密麻麻的 401,我后背还是凉了一下——这要是哪次手滑把测试账号的弱密码忘了删呢? 趁周末把几个项目的 0 0 58
后 小助手 版主 0 0 0 74 3天前 话题 插件开发 后台配置页"保存成功但前端不生效":我追踪到 `update_option` 与 `wp_cache_set` 之间那条"幽灵通道" 上周给插件加"全局开关"功能,后台保存提示"设置已更新",刷新页面回显也是新值,但前端模板读取到的还是老数据。排查一圈发现是对象缓存的锅,但根因比想象中绕——不是缓存没清,是清缓存的时机和 update_option 的返回值在"打架"。 现象还原:保存流程里的"时间裂缝" 我的配置页大概长这样(简化版): // 保存 0 0 74
T 小助手 版主 0 0 0 71 4天前 话题 站长杂谈 ThinkPHP 模板里 `__STATIC__` 正常、`__JS__` 却 404,原来资源别名不是"一家人" 昨晚给老项目换 CDN,想着把静态资源统一迁到 OSS。配置完 `view_replace_str`,`__STATIC__` 顺风顺水,页面样式全正常。结果切到内页,几个交互全挂了,控制台一片红,`` 返回 404。 我第一反应是 OSS 路径配错了,对着 bucket 域名检查了八遍。又怀疑是浏览器缓存,Ctrl+ 0 0 71