如何从wp-json分类响应中移除指定术语(如uncategorized)
解决WordPress REST API移除特定分类的问题
正确实现思路
别用rest_prepare_category过滤器(它只能修改单条数据的返回内容,没法彻底移除条目),应该通过修改REST API的查询参数,让后端直接不查询目标分类,从根源上排除它。
具体代码实现
把以下代码添加到主题的functions.php文件中:
add_filter( 'rest_category_query', 'exclude_uncategorized_from_rest_api' ); function exclude_uncategorized_from_rest_api( $args ) { // 动态获取"未分类"的ID,默认是1,也可通过get_term_by自定义获取 $uncategorized_id = get_option( 'default_category' ); // 合并原有排除规则(如果有的话),添加目标分类ID到排除列表 $args['exclude'] = isset( $args['exclude'] ) ? array_merge( $args['exclude'], array( $uncategorized_id ) ) : array( $uncategorized_id ); return $args; }
代码说明
rest_category_query过滤器专门用来修改分类REST API的查询参数,返回修改后的参数数组即可生效。- 用
get_option('default_category')获取默认分类(未分类)的ID,比硬写ID更适配不同站点配置。 - 如果原本已有
exclude参数,会自动合并进去,不会覆盖原有排除规则。
之前方法失效的原因
- 设置
$response为false:rest_prepare_category要求返回WP_REST_Response对象,返回false会被API处理成布尔值条目,无法真正移除。 unset($response)或unset($response->data):该过滤器必须返回响应对象,销毁变量会导致API找不到返回值,触发致命错误。
内容的提问来源于stack exchange,提问作者honk31
相关产品推荐
相关产品推荐

