Wordpress 主题开发直接看着官方文档啃下来也是挺辛苦的,拖了三个月北京毕设半个月病假终于在跨过 NGG 的坑之后搞定了,撒花撒花

NextGEN Gallery is the most popular gallery plugin ever for WordPress. Enjoy fully responsive design, a dozen gallery styles, a stunning full screen lightbox, commenting and social sharing for images, ecommerce, proofing, and more.

简单来说就是一个图片管理工具,功能很强大,但也有点不和谐。我遇到的是直接在数据库删除了 ngg_ 三个表之后,无论如何重装插件,都没法重新建表的问题。在 这里 喵了一个早上没发现满意的答案,Cais 在这类问题下大部分回答是清理浏览器缓存,重新启用或重装插件,还有恢复站点备份(我摔)

Wordpress 版本 4.3.1-zh_CN
Nextgen Next 版本 2.1.15

下面是正文

你好我是正文

于是备份了本地的代码和数据库,在本地测试环境上重现问题,并做调试

尝试从源码找到建表方法的调用,无果

由于多次重装 NGG 之后之前的配置项保留,因此猜测可能是插件在数据库的某个地方还保留了配置数据,然后安装的过程中由于配置数据的存在而忽略建表。在看到 这个答案 后确定了方向,应该是 wp_optionswp_postmeta 这两个表的问题(Cais 还提到了 wp_usermeta,不过这里没关系)

根据 这个答案 的方法做处理,删除 wp_options 带有 ngg 字段的五条记录,发现配置数据成功被重置,但依然无法建表

delete from wp_options where option_name like "%ngg%";

同时删除 wp_postmetanextgen 字段的记录,没什么用

delete from wp_postmeta where meta_value like "%nextgen%"

于是安装了插件 WP Database Reset,准备暴力定位问题

  1. 重置除 user 外的所有表,启用 NGG,成功建表
  2. 恢复之前备份的数据库,再逐个表重置并尝试启用 NGG 是否可以建表,然后发现了问题在于 wp_options,接下来要找到其中搞鬼的记录了
  3. 重置 wp_options,导出所有记录;进入插件页面,导出所有记录;启用 NGG,导出所有记录。对比之后发现启用 NGG 会在 wp_options 里面创建 6 条记录。关键的 pope_module_list 在之前被忽略了

    Records

  4. 删除 pope_module_list 这条记录,启用 NGG,又见到熟悉的 ngg_,问题解决🎉🎉

    delete from wp_options where option_name="pope_module_list";

其他

简单看了下 pope_module_list 的值,里面存放的应该是各个模块及其版本号,包括 photocrati-nextgen-legacy,而建表的方法 modules/ngglegacy/admin/install.php 应该就是这里相关了。如果联系上 update 方法,那么更新 NGG 的话应该会从这个值里面获取模块版本号做对比,不需要更新则忽略,然后造成了上面的问题

话说删除插件好歹顺手把数据库也清了啊。。。