我在Wordpress中创建了一个自定义post类型,并将其公开给RESTAPI。我还使用ACF插件在本文中添加了自定义字段。
在我的主题中function.php我在响应中注册了这些字段,当我发出get请求时可以看到它们。
< code>register_rest_field('auto ',' specs ',array('get_callback' =
问题是当我发送帖子请求时,wordpress无法识别这些字段。它创建了一个带有标题的新帖子,所有额外的字段都是空的。
对我来说,诀窍是将自己连接到rest prepare post,然后将字段添加到数组中,然后返回响应对象。
function slug_add_data($response, $post) {
$response->data['latitud'] = get_field('latitud', $response->data['id']);
$response->data['longitud'] = get_field('longitud', $response->data['id']);
return $response;
}
add_filter('rest_prepare_post', 'slug_add_data', 10, 3);
使用开箱即用的解决方案来访问Rest API中的ACF字段,而不是使用自定义代码。
插件URL:https://github.com/airesvsg/acf-to-rest-api
添加过滤器如下:
//Filter to to get acf field within acf field for relational field set
add_filter( 'acf/rest_api/<custom_posttype>/get_fields', function( $data ) {
if ( ! empty( $data ) ) {
array_walk_recursive( $data, 'get_fields_recursive' );
}
return $data;
} );
如果所有的配置都是正确的,你将得到默认WordPress Rest API响应中的ACF fields对象。
如果需要任何帮助,请告诉我!
尝试该解决方案:
function wp_api_encode_acf($data,$post,$context){
$data['meta'] = array_merge($data['meta'],get_fields($post['ID']));
return $data;
}
if( function_exists('get_fields') ){
add_filter('json_prepare_post', 'wp_api_encode_acf', 10, 3);
}
参考:https://gist.github.com/rileypaulsen/9b4505cdd0ac88d5ef51