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

WordPress REST API:按关联Agent筛选Artist自定义文章类型JSON

解决WordPress REST API中按关联Agent筛选Artist自定义文章类型的问题

我来帮你搞定这个按Agent筛选艺术家的问题!核心问题其实是你设置的双向关联字段没出现在Artist的REST API响应里,导致前端没法用它来筛选。咱们一步步来解决:

1. 先让关联的Agent字段暴露在Artist的REST响应中

默认情况下,WordPress不会自动把自定义关联字段加入REST API的输出结果里,所以得手动注册它。这里分两种常见场景处理:

如果你用的是ACF(高级自定义字段)

ACF自带REST访问的开关,也可以用代码确保字段能被正确输出:

// 把这段代码加到主题的functions.php或者自定义插件中
add_action('rest_api_init', function() {
    // 替换成你的自定义文章类型slug和关联字段名
    register_rest_field('artist', 
        'associated_agent_id', 
        array(
            'get_callback' => function($post) {
                // 获取关联的Agent ID(如果是多选关联,返回ID数组)
                $agent_data = get_field('agent_association', $post['id']);
                return is_array($agent_data) ? array_column($agent_data, 'ID') : $agent_data;
            },
            'schema' => array(
                'description' => '当前艺术家关联的Agent ID',
                'type' => 'integer' // 多选的话改成'array',并添加'items' => array('type' => 'integer')
            ),
        )
    );
});

如果你用的是自定义开发的关联字段

如果是自己用add_post_meta存储的元字段,注册方式如下:

add_action('rest_api_init', function() {
    register_rest_field('artist',
        'associated_agent_id',
        array(
            'get_callback' => function($post) {
                // 替换成你的元字段键名
                return get_post_meta($post['id'], '_linked_agent_id', true);
            },
            'schema' => array(
                'description' => '当前艺术家关联的Agent ID',
                'type' => 'integer'
            ),
        )
    );
});

添加代码后,访问/wp-json/wp/v2/artist就能看到每个Artist对象里多了associated_agent_id字段了。

2. 给REST API添加按Agent ID筛选的能力

接下来要让API接受agent_id参数,返回对应Agent管理的艺术家:

add_filter('rest_artist_query', function($args, $request) {
    $target_agent_id = $request->get_param('agent_id');
    if (!empty($target_agent_id)) {
        // 替换成你的关联字段元键(ACF用字段名,自定义字段用元键)
        $args['meta_query'][] = array(
            'key' => 'agent_association',
            'value' => $target_agent_id,
            'compare' => '=' // 多选关联的话改成'IN',支持传入多个ID
        );
    }
    return $args;
}, 10, 2);

提示:如果是ACF多选关联,记得在字段设置里把“返回值”改成“Post ID”,这样存储的是纯ID数组,用IN筛选更高效。

3. 前端调用时传递Agent ID参数

现在在Steve Paul的详情页点击“管理的艺术家”按钮时,只需要在请求URL里带上agent_id参数就行:

// 假设当前Agent的ID是123(可以从Agent详情页的REST数据中获取)
fetch('/wp-json/wp/v2/artist?agent_id=123')
    .then(response => response.json())
    .then(artists => {
        // 在这里渲染筛选后的艺术家列表
        renderArtistList(artists);
    })
    .catch(error => console.error('获取艺术家列表失败:', error));

额外注意事项

  • 确保你的Agent和Artist自定义文章类型在注册时,已经设置show_in_rest为true,否则REST API访问不了这些文章类型。
  • 如果遇到权限问题,要确认当前用户有访问这些REST端点的权限。
  • 测试时可以直接在浏览器里访问/wp-json/wp/v2/artist?agent_id=你的AgentID,验证返回结果是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:37