如何从WordPress站点分别提取各类JSON数据用于Android应用开发
嘿,我来帮你搞定把WordPress数据转换成JSON的事儿!针对你的需求——4种自定义文章类型(CPT)、20+自定义元框,还有作者资料,同时考虑到你500MB的数据库大小,我整理了几个靠谱的方案,从最贴合WordPress生态的到直接操作数据库的都有,你可以根据自己的技术栈选:
方案一:用WordPress REST API(最推荐,安全又合规)
WordPress自带的REST API是最稳妥的方式,不用直接碰数据库,还能自动处理权限和数据格式。
1. 确保自定义文章类型(CPT)支持REST API
如果你的CPT是自己开发的,检查注册代码里有没有加'show_in_rest' => true参数。比如:
register_post_type('your-cpt-slug', array( 'public' => true, 'show_in_rest' => true, // 关键参数,开启REST支持 // 其他配置... ));
如果是用插件创建的CPT,一般插件会默认开启这个选项,要是没开,找插件设置里的“REST API”开关就行。
2. 导出CPT数据(包含自定义元框)
默认REST API不会返回自定义元数据,得把你的元框字段注册到API里。可以在主题的functions.php里加这段代码:
// 注册单个元字段到REST API register_meta('post', 'your-meta-key', array( 'show_in_rest' => true, 'single' => true, 'type' => 'string' // 根据你的元数据类型调整,比如int、boolean )); // 如果要批量注册多个元字段,用循环更高效 $meta_keys = array('meta-key-1', 'meta-key-2', 'meta-key-3'); // 换成你的元框字段名 foreach ($meta_keys as $key) { register_meta('post', $key, array( 'show_in_rest' => true, 'single' => true, 'type' => 'string' )); }
注册好之后,访问这个URL就能获取该CPT的所有发布状态文章的JSON:https://your-site.com/wp-json/wp/v2/your-cpt-slug
3. 获取作者资料详情
直接访问这个URL就能拿到所有作者的完整资料(包括元数据):https://your-site.com/wp-json/wp/v2/users?context=editcontext=edit会返回更多隐私相关的字段(比如邮箱),如果只需要公开信息,用context=view就行。
4. 处理大数据量
因为你数据库有500MB,直接拉全量数据可能超时,REST API支持分页:https://your-site.com/wp-json/wp/v2/your-cpt-slug?page=1&per_page=100per_page最大可以设到100,多请求几页就能把所有数据拉完,还能避免服务器压力过大。
方案二:直接用SQL查询导出JSON(适合一次性批量导出)
如果你需要快速导出全量数据,直接操作MySQL数据库效率更高,不过要注意备份数据库再动手!
1. 查询单个CPT的文章+自定义元数据
用MySQL的JSON函数直接生成结构化JSON,示例SQL(替换your-cpt-slug和表前缀wp_为你的实际值):
SELECT JSON_ARRAYAGG( JSON_OBJECT( 'id', p.ID, 'title', p.post_title, 'content', p.post_content, 'date', p.post_date, 'status', p.post_status, 'author_id', p.post_author, 'meta', (SELECT JSON_OBJECTAGG(meta_key, meta_value) FROM wp_postmeta pm WHERE pm.post_id = p.ID) ) ) AS cpt_data FROM wp_posts p WHERE p.post_type = 'your-cpt-slug' AND p.post_status = 'publish';
执行后会返回一个JSON数组,包含该CPT的所有文章及其元数据。
2. 查询作者完整资料
同样用JSON函数关联用户表和用户元数据表:
SELECT JSON_ARRAYAGG( JSON_OBJECT( 'id', u.ID, 'username', u.user_login, 'email', u.user_email, 'display_name', u.display_name, 'register_date', u.user_registered, 'meta', (SELECT JSON_OBJECTAGG(meta_key, meta_value) FROM wp_usermeta um WHERE um.user_id = u.ID) ) ) AS author_data FROM wp_users u;
3. 导出到文件
如果查询结果太大,直接复制不方便,可以用MySQL的INTO OUTFILE导出到服务器文件:
SELECT JSON_ARRAYAGG(...) INTO OUTFILE '/path/to/your/cpt-data.json' CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
注意要确保MySQL有该路径的写入权限,或者用phpMyAdmin的“导出”功能,选择JSON格式即可。
4. 大数据量优化
500MB的数据库查询时容易锁表,建议:
- 在网站低峰期操作
- 用
LIMIT分批查询,比如每次查1000条:LIMIT 0,1000,LIMIT 1000,1000,最后合并JSON - 确保
wp_posts.post_type、wp_posts.post_status字段有索引(一般WordPress默认会建)
方案三:用WP-CLI命令行工具(适合技术人员批量操作)
如果你熟悉命令行,WP-CLI是批量导出的利器,速度快还能自动化。
1. 导出单个CPT的基础数据
wp post list --post_type=your-cpt-slug --format=json --fields=ID,post_title,post_content,post_date,post_author > cpt-data.json
2. 导出自定义元数据
要把元数据和文章数据合并,先导出所有文章ID,再批量获取元数据:
# 导出CPT的所有文章ID wp post list --post_type=your-cpt-slug --format=ids > cpt-ids.txt # 批量获取每个文章的元数据并导出 while read id; do wp post meta get $id --format=json >> cpt-meta.json done < cpt-ids.txt
之后可以用简单的Python/PHP脚本把两个JSON文件合并成包含元数据的结构化数据。
3. 导出作者资料
wp user list --format=json --fields=ID,user_login,user_email,display_name,user_registered > authors-data.json # 导出作者元数据 wp user meta list --user=all --format=json > authors-meta.json
最后小提醒
- 不管用哪种方案,先备份数据库!避免操作失误导致数据丢失
- 如果用REST API,记得调整PHP的
memory_limit和max_execution_time,避免超时 - 自定义元框如果有复杂数据(比如数组、对象),REST API和SQL都会自动处理成JSON格式,不用额外转换
内容的提问来源于stack exchange,提问作者Kazi Kowshik




