用插件把八个页面拖成想要的顺序,页面属性里也显示 1 到 8,第二天打开又变回按标题排。数据库里 menu_order 全是 0。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,拖拽只改了页面上的 DOM 顺序,保存请求没有真正写进 menu_order,或者当前用户没有编辑这些页面的权限被静默跳过。前台查询如果按 date 排,写进去也不会生效。

「menu_order 顺序丢失」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。

SELECT ID, post_title, menu_order FROM wp_posts
WHERE post_type = 'page' AND post_status = 'publish'
ORDER BY menu_order ASC, ID ASC;

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,先看数据库里 menu_order 到底有没有值,区分是没写入还是没读出来;在页面属性里逐个填数字保存,确认能落库,再回头查拖拽插件的请求;检查前台查询的 orderby,必须是 menu_order 才有意义。

最后用这个标准收尾,刷新后顺序和拖拽结果一致,前台导航的排列也跟着变。

作者 9823189