使用自定义post类型在WP REST API中嵌套ACF JSON数据



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

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

我有一个自定义的帖子类型"案例研究"创建的自定义帖子类型UI插件。我有一个名为"案例研究"的自定义字段组(通过ACF),只有当帖子类型为案例研究时才应用。

我还有一个名为Home的自定义字段组,它应用于主页。其中一个领域是"特色案例研究"。字段类型为Post对象,"Filter by Post type"设置为Case Study。

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

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

案例研究自定义文章类型的"ShowinRESTneneneba API"设置也设置为True,因此我为主页选择的案例研究也是JSON数据的一部分。

到目前为止,一切都很好。

问题是所选案例研究的ACF数据不在主页JSON数据中。案例研究后对象显示了默认的WordPress字段,尽管是JSON,但没有显示ACF数据。

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

是否有任何方法可以获取附加到另一个ACF字段的自定义帖子类型的ACF数据?

从这个Github问题中了解到了这一点。我需要在主题中为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);

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

$data混合(数组,WP_REST_Request)$请求混合(WP_REST_request,NULL)$response混合(WP_REST_response,NULL)$object混合(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|page|user|comment|attachment|custom-post-type|taxonomy

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

最新更新