从旧主题切到新主题,前台侧栏和小工具全空,外观里的小工具页面底部堆着一排「未激活的小工具」,内容其实都还在。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

// 切换前备份
wp option get sidebars_widgets --format=json > widgets-backup.json

小工具实例存在 options 里不会丢,但归属关系记在 sidebars_widgets 中,键是旧主题注册的 sidebar id。新主题注册的 id 不同,旧的对应关系找不到落点,就被归到 wp_inactive_widgets。这一点先确认清楚,后面就不用反复试。

「主题切换小工具丢失」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,先记下旧主题注册的 sidebar id 列表,再对照新主题的 id;切换前把 sidebars_widgets 备份一份,出问题能改回去;手动把未激活区的小工具拖回新侧栏,或写脚本按 id 映射迁移。

改完照着核一遍,新主题前台侧栏出现原来的小工具,未激活区清空。

作者 9823189