admin-ajax返回500错误的原因已找到,因为存在更新term分类时联动更新对应page页面,更新page页面时同步term分类数据的需求。
问题:更新term或page时无限转圈,后台查到返回500错误且一直重复请求。
原因:保存post(page)文章时更新 term 分类时由于wp文章草稿回档问题引发了无限循环更新(循环请求更新返回500错误但数据已更新的原因应该是,第一次匹配到指定更新数据,但第二次该数据已删除但请仍在请求更新所以返回500无限循环请求)。
方案:在 save_post 钩子内执行 wp_update_term 更新相关分类时,因为wp默认存在 revision 回档文章数据,所以在执行分类更新时需使用 wp_is_post_revision 判断当前更新 post_id 是否为存档文章,是则使用 remove_action 移除掉相关 hook 后再执行 wp_update_term 更新,然后再 add_action 添加该 hook!,否则直接执行 wp_update_term 更新分类。
Ps.
问题主要是没细看文档,更新分类 wp_update_term 钩子中貌似没有详细描述该循环问题,但更新文章 wp_update_post 钩子中文档里写了关于 Infinite loop 的相关说明,见:wp_update_post()、wp_update_term() WP新增/删除分类时候无限转圈已修复,未知原因:functions.php 尾部多余的“php开头/结尾符”.. 顺带一提:sitemap无法生成是原因是因为 sitemap.php 内使用相对路径“.././././”调用了 wp-load.php(需要使用wp的 get_option 函数所以需要加载wp文件)但在某些情况下无法正常获取到,所以出错了。(问题是这个原因是再另一个wp程序上测试出来的,因为另一个wp程序给我发错误邮件了,不知道为什么这个主题没有发送错误邮件,显示的是5.2版本开始就支持了..) 目前已实现创建/编辑/删除分类时同步数据到对应页面,创建分类时会自动创建对应name/slug页面,删除分类时将直接删除页面(默认分类没有回收站,所以当分类被删除时,对应页面将绕过回收站直接删除)。注意新建页面时不会创建对应分类,删除页面时会自动查询该页面是否存在已绑定的分类并删除(一般来说不建议通过页面来删除分类,会返回一个删除错误,即使已经正常删除页面及分类,目前该问题仍在解决中)
2022年4月19日 - wordpress