这事儿我碰到过不止一次了。前一分钟还在后台的导航设置里高高兴兴地加了个新栏目,保存之后页面也提示成功了,跑到前台刷新一看,导航确实多了一栏。结果一转头回后台,栏目管理列表里干干净净,啥都没有。那种感觉就像自己刚写完的纸条被人擦掉了墨,很懵。
先说一个最常见的可能——缓存。不少网站系统装了缓存插件或者开启了服务器端的缓存,甚至有些老式的后台会在添加成功后只刷新当前页而不会强制重载整个列表。导航设置写入数据库那一步其实已经完成了,前台能看到就是证据,但后台列表页可能还停留在旧的缓存快照里。你就强制刷新一下浏览器,Ctrl+F5或者是Mac上的Command+Shift+R,一般就能解决。如果还是不行,再检查一下后台有没有自己的缓存清理按钮,像是更新缓存、重建缓存这一类的操作,点一下再回栏目列表看看。
还有一种情况也比较闹心,特别是WordPress这类内容管理系统里容易出现。导航菜单这个功能跟栏目分类表是分开存储的,存放位置分别在菜单表和菜单项关系表当中。但有些主题或者插件会自己搞一套栏目管理,通过自定义字段来建分类,这种情况下你在导航设置里添加的栏目其实并没有被写进后台常规的栏目管理接口里。你在后台界面看,它会出现在菜单列表里,但不会出现在“分类”或者“栏目管理”的那个入口里。你得找到主题设置里专门的栏目管理板块,一般藏在主题选项或者“外观”底下的自定义菜单里。
另外一个容易忽略的是用户的权限层级问题。如果你用的是多用户的后台,管理员分配了不同角色的权限范围,有可能你当前登录的账号在导航编辑这一块有权限,但在栏目管理那个模块压根就没有查看权限。后台界面不一定会提示你无权限,更多时候只是静静地不显示那个栏目。这种情况去检查一下当前账号的角色和权限设置,换管理员账号登录看看就能找到原因。
还有一种比较隐蔽的问题跟数据库有关,尤其是那些做过二次开发或者改过表结构的站点。栏目标题存储的字段如果是varchar类型,长度设得太短,而你加的标题字数超出了限制,写入数据库时可能被截断或者插入异常。有些时候SQL写入了,但因为字段类型不匹配导致某些查询条件下读不出来。导航页面前台调用的可能是另一段代码,只取部分字段,所以能显示出来。而后台列表页要查的字段更多,某个字段出现问题,整条记录就查询不到。这种情况你直接在后台的数据库管理工具里看一眼那张表,刚才插入的数据是不是真的写进去了,一目了然。

再讲一个很多人压根想不到的方向。有些网站的栏目列表页是有筛选条件的,比如默认只显示状态为“发布”的栏目,而你添加时不小心选了“草稿”或者“待审核”,前台导航设置那段代码可能默认会把所有状态的栏目都渲染出来,但后台列表只展示已发布的。这时候你切换一下筛选条件,把显示状态改成“全部”,新加的栏目可能就乖乖出现了。
我印象比较深的一次是给一个企业站排查一模一样的问题。客户那边用了个国产的建站系统,管理员权限设置搞得特别复杂,有模块权限、操作权限、数据范围权限三个维度。导航设置那一个入口放到了“运营管理”模块下面,而栏目管理在“内容中心”模块。添加导航栏目的时候系统自动在内容中心那边生成了一条分类记录,但那个管理员账号的内容中心数据范围被设成了“仅本人创建”,添加操作又是系统自动完成的,没有创建人ID,结果列表页怎么查都查不到。后来改了一下数据范围权限,页面马上就有了。
如果你排查完上述这些可能原因依然没搞定,还有一个简单粗暴的验证方法。直接在数据库里搜一下你刚添加的栏目标题关键字,看看到底有没有存进对应的表里。有的话就确认一下后台列表查询时用的条件,没有的话说明添加操作本身就没有真正成功,可能只是前台的假数据,像有些模板的导航设置支持动态渲染和静态文件输出两种模式,切换模式的时候把数据弄丢了。
遇到这类问题把握好一个原则就很省事,不要光盯着后台界面看,把关注点放在数据和逻辑链路上。先确认数据写进去了,第二步确认查询条件有没有过滤掉这条数据,第三步看权限层有没有限制。绝大多数压根找不到的情况都不出这三步范围。