wordpress内容导出需绕过原生机制,直连数据库提取结构化数据并清洗,ci4端通过wpcontentexporter服务类支持多格式导出、分块查询、权限校验与字段校验,确保安全稳定跨平台同步。

WordPress内容导出格式单一、缺乏CI4(CodeIgniter 4)集成能力,是不少企业级站点在内容复用与跨平台同步时遇到的典型瓶颈。问题核心不在“能不能导出”,而在于“导出后能否直接对接现代PHP框架生态”。单纯依赖WordPress原生XML导出或第三方插件,往往导致格式僵化(仅限XML)、流程割裂(无法嵌入CI4命令行或服务层)、权限与分页失控。要真正打通WP内容到CI4系统的批量导出链路,需绕过表层UI,从数据管道与协议适配入手。
统一数据出口:剥离WordPress模板逻辑,直取原始内容结构
避免使用the_content过滤器或WP_Query前端查询——它们受主题、插件钩子干扰大,输出不稳定。应直接访问数据库并构造标准化内容对象:
- 查
wp_posts表获取post_title、post_content、post_status、post_date_gmt等基础字段 - 通过
wp_term_relationships+wp_term_taxonomy+wp_terms三表联查,提取分类、标签等结构化元数据,统一为['categories' => [...], 'tags' => [...]]数组 - 对
post_content做最小化清洗:移除短代码残留、剥离<script></script>/<style></style>标签,保留语义HTML,便于CI4端后续解析或转Markdown
CI4适配层:封装为可注入的服务类,支持命令行与HTTP双入口
在CI4项目中新建App\Services\WpContentExporter,不依赖WordPress运行环境,只接收结构化数组或数据库连接配置:
- 构造函数接受
$wpDbConfig(含host/user/pass/dbname),用mysqli或PDO直连,避开WP加载开销 - 提供
exportByDateRange(DateTime $from, DateTime $to, string $format = 'json')方法,支持按时间批量拉取,避免单次请求超载 - 内置
toJson()、toCsv()、toMarkdownArray()三类序列化器,格式可扩展,不硬编码PDF/DOC等重型转换(留给CI4下游服务处理) - 命令行调用示例:
php spark wp:export --from="2025-01-01" --to="2025-12-31" --format=csv --output=/var/data/wp-batch.csv
安全与稳定性控制:防超时、防越权、防脏数据
批量导出不是“一次跑完”,而是可控的数据流作业:
- 启用分块查询(chunking):每次最多取500条记录,用
LIMIT/OFFSET或游标式WHERE id > ?避免大结果集OOM - 强制身份校验:CI4端调用前须验证API Token或JWT,且Token绑定允许导出的
post_type白名单(如仅post和page,禁用revision或nav_menu_item) - 输出前校验字段完整性:对每条记录检查
post_title非空、post_status为publish,自动跳过异常项并记录warn日志,不中断整个批次
格式可扩展设计:JSON优先,CSV兼容,预留Markdown与YAML接口
不把格式选择塞进WordPress后台选项页,而由CI4调用方决定:
- 默认输出严格JSON:字段名小写+下划线(
post_title)、时间用ISO8601("post_date": "2025-06-15T08:30:00+00:00"),便于CI4Format类直接解析 - CSV生成不依赖
fputcsv逐行写——改用内存缓冲+stream_get_contents,防止大文件触发PHP内存限制 - Markdown导出仅生成纯文本结构(标题、正文、分类列表),不渲染HTML,交由CI4的
Markdownify库二次加工,保持职责分离











