基于WordPress的deepseek自动生成插件实战:支持CSV导入、随机创作与节奏控制的完整开发指南(从表格到博客一键生成!支持随机写作与定时生成的WordPress AI自动内容)
发表于|更新于|wordpress
目录
- 1. 引言:
- 2. 第一步:插件目录结构设计
- 3. 第二步:auto-create-content-byai.php 插件主文件(入口文件)
- 4. 第三步:admin/settings-page.php —— 设置页面布局逻辑
- 5. 第四步:admin/settings-fields.php —— 设置字段定义与处理
- 6. 第五步:admin/scheduler.php —— 定时任务注册与调度
- 7. 第六步:includes/content-creator.php —— 内容创建核心逻辑
- 8. 说明
- 9. 第七步:includes/ai-content-generator.php —— AI 内容生成逻辑
- 10. 模块说明:
- 11. 第八步:includes/image-handler.php —— 特色图自动处理逻辑
- 12. 模块说明:
- 13. 第九步:includes/logger.php —— 日志记录与显示模块
- 14. 模块说明:
- 15. 第十步:assets/js/admin-script.js —— 后台 JS 脚本逻辑
- 16. 后台日志刷新配套:ajax 回调函数添加到 includes/logger.php
- 17. 模块说明:
- 18. 第十一步:assets/css/admin-style.css —— 设置页样式
- 19. 如何使用:
- 20. 下一步建议(可选):
- 21. 一、templates/settings-page-template.php
- 22. 二、uninstall.php
- 23. 三、includes/helper.php
- 24. 总结
- 25. 1. 开启 WordPress 调试模式,查看详细错误信息
- 26. 2. 常见错误及排查方向
- 27. 3. 重点检查你代码里几个关键点
- 28. 4. 简单快速定位方法
- 29. 5. 如果方便,可以把 debug.log 里面的具体错误信息发给我,我帮你具体定位。
- 30. 解决方案
- 31. 具体操作建议
- 32. 例如,helper.php 头部示例:
- 33. 总结
- 34. ✅ 如何查看当前日志记录创建的具体类型?
- 35. ✅ 正确做法:增强日志内容,显示类型
- 36. ✅ 你可以这样修改:
- 37. ✅ 附加建议:过滤掉无用 post type(如 attachment)
- 38. 最终效果
- 39. ✅ 你看到日志写的是“创建成功”,但没有看到任何内容被创建。这种情况可能是假成功,也可能是创建到了不被注意的类型中。
- 40. 🔍 1. 确认创建的 post type 是否是你关注的类型
- 41. 🔍 2. 确认 post 是否处于“已发布”状态
- 42. 🔍 3. 确认是否成功创建了 portfolio 类型
- 43. 🔍 4. WooCommerce product 创建成功但未显示?
- 44. 🔧 最终建议:修复 post_type 随机来源
- 45. ✅ 总结排查建议
- 46. ✅ 目标
- 1. ✅ 改进后的代码(含 HTML+CSS,美观展示)
- 2. ✅ 效果说明:
- 3. 🔄 示例输出:
- 4. ✅ 问题分析
- 5. ✅ 解决方案:将 Markdown 转换为 HTML 后再保存
- 6. ✅ 推荐使用方式:方法一 + Parsedown(稳定、安全、结构清晰)
- 7. 📦 如果你希望,我可以:
- 8. ✅ 改进点:
- 9. ✅ 前提:请确保你已在插件中加入 Parsedown.php
- 10. ✅ 完整函数:改进后的 accbyai_generate_ai_content()
- 11. ✅ 你还需要的依赖文件:
- 12. ✅ 成果效果:
- 13. ✅ 目标
- 14. ✅ 正确处理方式
- 15. ✅ 建议加日志确认分布
- 16. ✅ 补充提醒:确保其他类型真的注册了
- 17. ✅ 总结
- 18. ✅ 改进内容
- 19. ✅ 修改后的完整函数
- 20. ✅ 效果说明
- 21. ✅ 要实现的目标
- 22. ✅ 步骤一:在设置项中注册新字段
- 23. ✅ 步骤二:定义渲染函数 accbyai_render_post_type_checkbox()
- 24. ✅ 步骤三:更新 accbyai_random_generate_once() 逻辑,使用后台设置值
- 25. ✅ 后台显示效果
- 26. ✅ 默认值建议
- 27. 修复方案
- 28. 修复后的完整函数 accbyai_render_post_type_checkbox() 部分:
- 29. 解决方案:
- 30. 修改 accbyai_sanitize_settings 函数,示例代码如下:
- 31. 重点
- 32. 1. 重置生成计数器
- 33. 2. 确认定时任务是否启动
- 34. 3. 手动触发测试
- 35. 4. 检查日志函数和写入
- 36. 5. 提示
- 37. 总结
- 38. 在后台设置页添加“重置随机生成计数”按钮
- 39. 1. 在 admin/settings-fields.php 中添加按钮渲染函数
- 40. 2. 在 accbyai_register_settings() 里注册这个新字段
- 41. 3. 在 admin/settings-page.php 或合适的后台页面处理提交请求
- 42. 4. 整合示例(关键部分)
- 43. 说明
- 44. 1. 确认 add_settings_field 放置正确
- 45. 2. 确认 add_settings_section 和 do_settings_sections() 绑定
- 46. 3. 调整示例代码
- 47. 4. 设置页模板调用示例(通常在 admin/settings-page.php)
- 48. 总结
- 49. 具体调整建议
- 50. 修改后示例部分代码(settings-fields.php):
- 51. 其他补充
- 52. 总结
- 53. 解决方案
- 54. 推荐做法
- 55. 这样做的好处
- 56. ✅ 第一步:在 admin/settings-fields.php 添加重置按钮字段函数
- 57. ✅ 第二步:在 accbyai_register_settings() 中注册字段
- 58. ✅ 第三步:在插件主文件(如 auto-create-content-byai.php)中添加处理逻辑
- 59. ✅ 第四步:在后台设置页面显示重置成功提示
- 60. 🔄 最终效果
- 61. 🧨 问题定位
- 62. ✅ 正确做法:删除上面的直接处理代码
- 63. ✅ 保留 重置按钮 HTML 部分(没问题)
- 64. ✅ 把表单处理逻辑放到插件主文件中(或任何后台已加载的 Hook)
- 65. ✅ 在后台页面显示成功提示
- 66. ✅ 最终你需要的文件结构确认
- 67. 🎯 目标明确:
- 68. ✅ 修改插件主文件里的处理函数
- 69. ✅ 附加:确认日志表结构匹配
- 70. ✅ 确保成功提示显示出来
- 71. 🔚 总结
- 72. ✅ 目标:
- 73. 🚨 原因分析:
- 74. ✅ 正确做法:在设置页模板 settings-page.php 中确保如下表单结构
- 75. ✅ 但这还不够
- 76. ✅ 添加手动保存逻辑(避免用 options.php)
- 77. ✅ 最终你会有两个 form
- 78. 🔍 总结:修复结果
- 79. 🧪 问题诊断:点击“重置”后日志仍存在,说明 删除日志失败,而无法继续创建内容,则是 accbyai_random_created 计数没有被正确重置或逻辑没判断生效
- 80. ✅ 修复方式:请检查主插件文件中 accbyai_handle_reset_random() 是否如下:
- 81. ✅ 检查日志表是否正确命名
- 82. ✅ 检查是否判断已完成而不执行生成
- 83. ✅ 建议:额外日志记录一条 重置执行完毕
- 84. ✅ 整体排查顺序
- 85. 💡 提示:是否开启了 enable_random
- 86. ✅ 解决方法:添加日志表创建函数并在插件激活时执行
- 87. ✳️ 第一步:在 includes/helper.php 或新建 includes/installer.php 中添加函数
- 88. ✳️ 第二步:在插件主文件 auto-create-content-byai.php 添加激活钩子
- 89. ✳️ 第三步:强制触发一次插件激活
- 90. ✳️ 第四步:验证表是否创建成功
- 91. ✳️ 第五步:重试点击“重置计数器”
- 92. ✅ 补充建议(可选)
- 93. ✅ 当前你的代码结构如下(问题点)
- 94. ✅ 解决方案:合并成一个激活处理函数
- 95. ✅ 同样地,如果你有 deactivation 钩子,也建议统一:
- 96. ✅ 总结建议
- 97. ✅ 最佳做法:在 ACCBYAI_Scheduler::activate() 内部调用 accbyai_create_log_table()
- 98. ✳️ 修改建议(关键)
- 99. ✅ 这样带来的好处:
- 100. ✅ 补充建议
- 101. ✅ 修改后的 scheduler.php 建议如下:
- 102. ✅ 注意事项
- 103. ✅ 表创建函数(确保已定义)
- 104. 解决方案:
- 105. 你可以选择:
- 106. 具体分析
- 107. 修改建议
- 108. 你可能需要修改的示例代码片段
- 109. 总结
- 110. 修改建议
- 111. Auto Create Content by AI 插件操作指引
- 112. 结语
- 113. Auto Create Content by AI 插件后期升级方向建议
- 114. ✅ 1. 修改 accbyai_display_logs() 实现分页(支持 Bootstrap)
- 115. ✅ 2. 修改 AJAX 回调支持分页参数
- 116. ✅ 3. 加载 Bootstrap + 添加 JS 脚本
- 117. ✅ 4. 结构参考
- 118. 1. 修改 accbyai_display_logs 支持每页数量和上下页按钮
- 119. 2. 修改 AJAX 回调支持传递每页数量参数
- 120. 3. 修改前端 HTML 添加每页显示数量选择框
- 121. 4. 修改 JS 逻辑支持每页显示条数和分页按钮
- 122. 1. 防止随机生成重复内容,标题更复杂
- 123. 2. 插件卸载时保留特定设置项
- 124. 总结
- 125. 1. 保证处理函数正确绑定
- 126. 2. 处理函数示例(你给的基础上稍微完整)
- 127. 3. 表单代码保持不变
- 128. 4. 你可以在管理页页面用 $_GET['accbyai_reset'] 检测是否重置成功,然后给出提示。
- 129. 1. 表单提交地址和 action 名称匹配
- 130. 2. 权限和 nonce 检查是否通过
- 131. 3. 函数 accbyai_log() 需在重置函数之前加载
- 132. 4. 检查表前缀
- 133. 5. 请求是否被正确触发
- 134. 6. 设置页反馈提示(可选)
- 135. 7. 兼容插件卸载
- 136. 结论
- 137. 实现说明
- 138. 1. PHP - 注册 Ajax 处理接口
- 139. 2. PHP - 给后台页面加载 JS 时,传递 Ajax URL 和 nonce
- 140. 3. PHP - 替换设置页中重置计数器按钮,改成普通按钮
- 141. 4. JS - 在 assets/js/admin-script.js 添加 Ajax 请求和确认逻辑
- 142. 总结
- 143. 后台 Bootstrap 美化样式示例 CSS
- 144. 使用示例
- 145. 额外建议
- 146. ✅ 修改后完整代码
- 147. ✅ 函数:accbyai_generate_ai_title()
- 148. ✳️ 放置建议
- 149. 💡注意事项
- 150. ✅ 正确做法:移除类型标记
- 151. ✅ 如果你之前调用了类似:
- 152. 🎯 目标
- 153. ✅ 修改建议(重点代码)
- 154. ✅ 修复策略
- 155. ✅ 应用方式
- 156. ✅ 最终效果示例
- 157. ✅ 优化目标
- 158. ✅ 修改建议代码(按文件分组)
- 159. ✅ 效果示例
- 160. ✅ 最终整合后的函数如下:
- 161. ✅ 同时保留辅助函数:
- 162. ✅ 可删除的原函数(已合并)
- 163. ✅ 目标调整
- 164. ✅ 修改后的函数代码如下:
- 165. ✅ 整合优化版代码如下:
- 166. ✅ 补充建议:accbyai_extract_one_title() 示例(保持清洁标题提取)
- 167. ✅ 整体逻辑总结:
- 168. ✅ 修改后的 accbyai_extract_one_title() 函数:
- 169. ✅ 改动说明:
- 170. ✅ 最佳实践:优化 accbyai_extract_one_title() 函数
- 171. ✅ 示例前后对比:
- 172. ✅ 升级后的 accbyai_extract_one_title():
- 173. ✅ 支持处理的示例
- 174. 文件名建议
- 175. 文件内容(已封装、独立执行、可删除即可禁用此功能)
- 176. 使用说明
- 177. ✅ 点击路径:
- 178. 示例页面地址:
- 179. ✅ 正确做法
- 180. ✅ 修改方法如下
- 181. ✅ 正确访问方式:
- 182. ✅ 结果
- 183. ✅ 补充建议(可选)
- 184. ✅ 调整目标
- 185. ✅ 修改 1:manual-excel-importer.php(去除菜单注册)
- 186. ✅ 修改 2:settings-page.php 适配标签显示
- 187. ✅ 修改 3:includes/manual-excel-importer.php 中注册渲染钩子
- 188. ✅ 最终访问入口
- 189. ✅ 修改后的 admin/settings-page.php
- 190. ✅ 配合说明
- 191. ✅ 修复方案
- 192. ✅ 建议修改内容如下
- 193. ✅ 效果说明
- 194. ✅ 修复方式
- 195. 1. 在 admin/settings-fields.php 中添加以下字段注册
- 196. 2. 注册字段的回调函数
- 197. ✅ 也可以简化选择方案:
- 198. ✅ 修改 manual-excel-importer.php 表单中的读取逻辑:
- 199. ✅ 最终建议
- 200. ✅ 问题 1:fgetcsv() 的 $escape 参数警告
- 201. ✅ 问题 2:AI 内容生成请求失败(wp_remote_post() 中 $body = false)
- 202. 🛠 解决方式:
- 203. ✅ 汇总修改建议
- 204. ✅ includes/manual-excel-importer.php 修复版
- 205. ✅ 问题定位
- 206. ✅ 修复方法
- 207. ✅ 可选增强:确保 json_encode() 不会失败的建议
- 208. ✅ 总结
- 209. ✅ 修复后的完整函数
- 210. ✅ 问题 1:fgetcsv() 报 Deprecated 警告
- 211. ✅ 问题 2:wp_remote_post() 报 boolean 类型错误
- 212. ✅ 修复方式
- 213. ✅ 建议添加错误追踪日志(可选)
- 214. ✅ 最终建议
- 215. ✅ 问题 1:wp_remote_post() 报错
- 216. ✅ 问题 1 修复方案(完整函数)
- 217. ✅ 问题 2:fgetcsv() 报 Deprecated
- 218. 🔁 最后建议
- 219. ✅ 完整修复代码:includes/manual-excel-importer.php
- 220. ❗当前问题:提示「表格下载失败或无效」
- 221. ✅ 检查点 1:确认你有 accbyai_download_csv_to_tmp() 函数
- 222. ✅ 检查点 2:确认 CSV URL 是否能从你的服务器访问
- 223. ✅ 检查点 3:服务器是否阻止下载非本域文件
- 224. ✅ 最佳调试建议
- 225. ✅ 总结
- 226. ❗核心问题:标题已存在或格式解析失败
- 227. ✅ 1. 检查标题是否已存在
- 228. ✅ 2. 检查 CSV 表头解析是否正常
- 229. ✅ 3. 记录日志查看解析结果
- 230. ✅ 4. 检查 post_type 是否注册
- 231. ✅ 示例测试建议
- 232. ✅ 最佳实践:加入日志记录每一条尝试
- 233. ✅ 结论与建议
- 234. ✅ 最终问题根因:CSV 文件编码格式 + 首行 BOM(Byte Order Mark)
- 235. 🔍 问题表现细节:
- 236. ✅ 最终解决方案:
- 237. 🧠 总结教训:
- 238. ✅ 需要修复的关键点
- 239. 🔁 可选优化建议(增强容错和日志)
- 240. 🧪 最终检查
- 241. ✅ 修复后小结
- 242. ✅ 新增功能说明:
- 243. ✅ 完整强化后的代码如下:
- 244. ✅ 使用方式提醒:
- 245. 🔍 常见原因
- 246. ✅ 解决方案
- 247. 🧪 附建议调试方式
- 248. ✅ 建议总结
- 249. ✅ 功能实现无误
- 250. 🧠 可优化建议
- 251. ✅ 结论
- 252. 🔧 优化后的完整代码
- 253. 🔄 推荐的后续升级方向