我使用以下插件从WordPress REST API获取JSON数据:
我使用自定义帖子类型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数据?
答案 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 |页面|用户|评论|附件|自定义帖子类型|分类