后台把三条公告设为置顶,前台列表里它们排在第十八、十九、二十位,排序字段在数据库里全是零,只有一条保留了原值。日志里能对上时间点,这种反而好排。

批量保存时用 wp_update_post 只传了标题和状态,menu_order 没带上,默认值零把之前的置顶序号覆盖。查询又只按日期倒序,零值自然排到后面。这一点先确认清楚,后面就不用反复试。

wp_update_post( [ 'ID' => $id, 'menu_order' => 1 ] );
$args = [ 'orderby' => [ 'menu_order' => 'ASC', 'date' => 'DESC' ] ];

「置顶公告排序」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:批量更新时把 menu_order 一起传进去,别只传标题;列表查询先按 menu_order 再按日期,两个字段都要写;改完在后台列表和前台各看一次顺序是否一致。

结果对不对很好判断,三条置顶公告稳定排在最前,刷新和翻页后顺序都不变。

作者 9823189