WP REST API中嵌套的ACF JSON数据,自定义帖子类型

时间:2016-05-09 22:15:54

标签: wordpress custom-post-type advanced-custom-fields

我使用以下插件从WordPress REST API获取JSON数据:

  • 高级自定义字段PRO(5.3.7)
  • WP REST API(2.0-beta13)
  • ACF到REST API(2.2.0)
  • 自定义帖子类型UI(1.3.4)

我使用自定义帖子类型UI插件创建了自定义帖子类型“案例研究”。我有一个名为“案例研究”的自定义字段组(通过ACF),仅在帖子类型为案例研究时应用。

我还有一个名为Home的自定义字段组,它应用于主页。其中一个领域是“特色案例研究”。字段类型是Post对象,“按帖子类型过滤”设置为案例研究。

现在我编辑我的主页,我可以使用精选案例研究选择框将案例研究对象附加到主页。

通过WP REST API插件,我可以将主页作为JSON数据获取,ACF部分通过ACF到REST API插件提供。我可以看到ACF为主页提供的所有字段。

案例研究自定义帖子类型的“在REST API中显示”设置也设置为True,因此我为主页选择的案例研究也是JSON数据的一部分。

到目前为止,非常好。

问题是所选案例研究的ACF数据不存在于主页JSON数据中。案例研究post对象与默认的WordPress字段一起显示,虽然是JSON,但未显示ACF数据。

我能够通过REST API自行获取所选的案例研究,并且所有需要的字段都可见。只有当此对象附加到主页时,我才能看到它的ACF字段。

有没有办法获取附加到另一个ACF字段的自定义帖子类型的ACF数据?

3 个答案:

答案 0 :(得分:0)

this Github issue看出来。我需要在我的主题中为functions.php添加一个特殊的过滤器。非直观和笨重,但它确实有效。

add_filter( 'acf/rest_api/page/get_fields', function( $data, $request, $response ) {
    if ( $response instanceof WP_REST_Response ) {
        $data = $response->get_data();
    }
    if( isset($data['acf']) && isset($data['acf']['featured_work']) ) {
        $data['acf']['featured_work'] = get_fields($data['acf']['featured_work']);
    }
    return $data;
}, 10, 3);

答案 1 :(得分:0)

add_filter( 'json_prepare_post', function ($data, $post, $context) {
    $data['acf'] = get_fields($post['ID']);
    return $data;
}, 10, 3 );

答案 2 :(得分:0)

我在上一个版本(v3)中更改了 get_fields 的参数,我删除了 $ response $ object ,现在我们只有这些论点: $ data $ request


    $data     mixed( array, WP_REST_Request )
    $request  mixed( WP_REST_Request, NULL )
    $response mixed( WP_REST_Response, NULL )
    $object   mixed ( WP_Post, WP_Term, WP_User, NULL )

使用方法:

add_filter( 'acf/rest_api/{type}/get_fields', function( $data ) {
    if ( isset( $data['acf']['featured_work'] ) ) {
        $data['acf']['featured_work'] = get_fields( $data['acf']['featured_work'] );
    }

    return $data;
} );

通配符 {type} 可以是:post |页面|用户|评论|附件|自定义帖子类型|分类