You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WP-REST API分类端点获取分类的ACF字段?

嘿,我来帮你搞定这个问题!你现在的代码问题出在获取字段的方式上——分类属于WordPress里的「术语(Term)」,不是文章(Post),所以get_the_ID()在这里根本拿不到分类的ID,得换个思路调整逻辑。

方法一:修正你现有的register_rest_field实现

你的代码框架方向是对的,但回调函数里的取值逻辑错了。在REST API处理分类请求时,会把分类的完整数据对象传递给回调函数,你可以从中提取term_id,再用ACF官方推荐的get_field()函数(比直接读元数据更靠谱,能自动处理字段格式)来获取值。

修正后的代码如下:

add_action( 'rest_api_init', 'add_category_acf_fields' );
function add_category_acf_fields() {
    register_rest_field( 'category', 'avatar', array(
        'get_callback' => function( $term_data ) {
            // $term_data 包含分类的所有数据,id字段就是分类的term_id
            return get_field( 'avatar', 'category_' . $term_data['id'] );
        },
        // 可选:添加字段的schema描述,让API文档更清晰
        'schema' => array(
            'description' => '分类的头像ACF字段',
            'type' => 'string' // 根据你的字段类型调整,比如图片字段可以设为object
        ),
    ) );
}

这里要注意:ACF存储分类字段时,需要用分类法_分类ID的格式作为参数,比如分类法是默认的category,那就是category_123(123是分类ID),这样ACF才能正确定位到对应的字段值。

方法二:启用ACF自带的REST API支持(更省心)

其实ACF本身就内置了让字段自动接入REST API的功能,完全不用自己写注册代码,步骤超简单:

  1. 登录WordPress后台,进入「自定义字段 > 设置」页面
  2. 找到「REST API」选项,勾选「启用ACF字段的REST API支持」
  3. 编辑你的ACF字段组,在「位置」设置里确保字段组关联了目标分类
  4. 在字段组的「显示选项」里,勾选「在REST API中显示」

设置完成后,你的分类ACF字段会自动出现在分类端点的响应里,通常会放在acf这个键下,示例响应大概是这样:

{
  "id": 5,
  "name": "技术分类",
  "slug": "tech",
  ...
  "acf": {
    "avatar": "http://your-site.com/wp-content/uploads/2024/05/avatar.jpg"
  }
}
为什么你的原代码跑不通?

原代码里的get_the_ID()是用来获取当前文章ID的,在REST API处理分类请求时,没有「当前文章」的上下文,所以拿到的ID要么是空的,要么是错误的;另外,ACF存储分类字段是存在term_meta表,而get_post_meta()只能读取post_meta表的数据,自然拿不到分类的ACF字段值。

两种方法都可以试试,方法二更适合快速实现,方法一适合需要自定义字段键、添加额外逻辑的场景~

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:53:13