在后台拖动菜单项调整顺序,顶部提示 Menu saved,刷新后顺序回到原来。拖了四次都一样,子菜单的层级也一起还原。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,保存请求里 menu_order 是按数组下标提交的,某个插件在 admin_init 阶段又按 post_date 重排了一次。数据写进去了,读出来之前被覆盖。
「菜单排序未保存」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
# 看实际写入的排序值 wp db query "SELECT ID, menu_order, post_title FROM wp_posts WHERE post_type='nav_menu_item' ORDER BY menu_order;"
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,用浏览器网络面板看保存请求里 menu_order 的顺序;停掉可能干预菜单排序的插件再试一次;直接在数据库里核对 menu_order 是否真的写入。
最后用这个标准收尾,刷新后菜单顺序和拖拽结果一致,子项仍挂在原来的父级下。
