You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从WordPress站点分别提取各类JSON数据用于Android应用开发

从WordPress数据库导出自定义内容为JSON的实用方案

嘿,我来帮你搞定把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=edit
context=edit会返回更多隐私相关的字段(比如邮箱),如果只需要公开信息,用context=view就行。

4. 处理大数据量

因为你数据库有500MB,直接拉全量数据可能超时,REST API支持分页:
https://your-site.com/wp-json/wp/v2/your-cpt-slug?page=1&per_page=100
per_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,1000LIMIT 1000,1000,最后合并JSON
  • 确保wp_posts.post_typewp_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_limitmax_execution_time,避免超时
  • 自定义元框如果有复杂数据(比如数组、对象),REST API和SQL都会自动处理成JSON格式,不用额外转换

内容的提问来源于stack exchange,提问作者Kazi Kowshik

火山引擎 最新活动