WordPress REST API无法返回全部视频、标签等数据的问题求助
WordPress REST API 返回内容不全的排查与解决方法
一、内容数量不足的核心原因及解决
1. 默认分页限制
WordPress REST API 默认会限制单页返回的内容数量,默认值通常是10,但可能被主题、插件或自定义代码修改成了更小的值(比如你遇到的4个视频、8个标签)。解决方法:
- 在API请求URL中显式添加
per_page参数,比如获取视频的请求改为:/wp-json/wp/v2/your-video-cpt?per_page=100(注意:per_page最大值为100,超过100条内容需要分页请求,配合page参数,比如page=2获取第二页) - 如果需要永久修改默认限制,可以在主题的
functions.php中添加代码:
add_filter( 'rest_post_collection_params', 'custom_rest_per_page' ); function custom_rest_per_page( $params ) { if ( isset( $params['per_page'] ) ) { $params['per_page']['default'] = 100; // 设置默认单页数量 $params['per_page']['maximum'] = 200; // 可自定义最大值 } return $params; }
(如果是自定义文章类型,把 rest_post_collection_params 换成对应类型的过滤钩子,比如 rest_your-video-cpt_collection_params)
2. 自定义文章类型的REST支持问题
如果你的「视频」是自定义文章类型(CPT),需要确保注册该类型时开启了REST API支持:
- 检查注册代码中是否包含
'show_in_rest' => true,同时可以指定'rest_base' => 'videos'来设置清晰的API端点路径。如果没开启,REST API无法返回该类型的全部内容。
二、标签未出现在列表中的原因
访问单个标签端点(/wp-json/wp/v2/tags/53)能获取数据,但列表不显示,90%的概率是该标签没有被任何文章/视频关联使用。WordPress REST API 的标签列表端点默认会过滤掉「使用次数为0」的标签。解决方法:
- 在标签列表请求中添加
hide_empty=false参数,改为:/wp-json/wp/v2/tags?hide_empty=false,这样就能获取到所有标签,包括未被使用的。 - 如果需要永久关闭这个过滤,在
functions.php中添加:
add_filter( 'rest_tag_query', 'include_empty_tags_in_rest' ); function include_empty_tags_in_rest( $args ) { $args['hide_empty'] = false; return $args; }
三、其他可能的排查点
- 权限问题:如果部分内容是「私密」「草稿」状态,REST API 默认不会返回,除非请求携带了具有对应权限的认证信息(比如JWT、Cookie认证)。
- 插件/主题冲突:某些安全插件、缓存插件可能会限制REST API的返回内容,尝试暂时禁用插件、切换到默认主题(比如Twenty Twenty-Four)来排查。
内容的提问来源于stack exchange,提问作者ImDarkk
相关产品推荐
相关产品推荐

