我正在开发一个杂志WordPress网站,它将为移动应用程序提供json feed.我使用高级自定义字段设置后端,并在每篇文章中为多篇文章和多个页面使用Repeater字段.http://www.advancedcustomfields.com/add-ons/repeater-field/

我正在使用JSON API,但这不包括我的任何自定义字段.目前有一个可以执行此操作的插件吗?

jak*_*ake 17
@Myke:你帮了我很大的忙.这是我的谦虚补充:
add_filter('json_api_encode', 'json_api_encode_acf');
function json_api_encode_acf($response)
{
if (isset($response['posts'])) {
foreach ($response['posts'] as $post) {
json_api_add_acf($post); // Add specs to each post
}
}
else if (isset($response['post'])) {
json_api_add_acf($response['post']); // Add a specs property
}
return $response;
}
function json_api_add_acf(&$post)
{
$post->acf = get_fields($post->id);
}
Run Code Online (Sandbox Code Playgroud)
通过搜索相同的问题来到这里.这还没有完全审查,但我认为这是正确的道路.看看这个.
我有一个比你更少的嵌套级别,这可能需要改变一点.但是JSON API插件有一个名为json_api_encode的过滤器.我有一个称为规格的转发器,看起来像这样.
在我的函数文件中,我有这个.
add_filter('json_api_encode', 'my_encode_specs');
function my_encode_specs($response) {
if (isset($response['posts'])) {
foreach ($response['posts'] as $post) {
my_add_specs($post); // Add specs to each post
}
} else if (isset($response['post'])) {
my_add_specs($response['post']); // Add a specs property
}
return $response;
}
function my_add_specs(&$post) {
$post->specs = get_field('specifications', $post->id);
}
Run Code Online (Sandbox Code Playgroud)
其中将自定义值附加到JSON API输出.请注意,ACF的get_field函数在这里完美地用于恢复转发器值的数组.
希望这可以帮助!
Wordpress 4.7更新
随着Wordpress 4.7的发布,不再提供REST功能作为单独的插件,而是将其引入(不需要插件)。
先前的过滤器似乎无效。但是,以下代码段确实存在(可以在您的functions.php):
> = PHP 5.3
add_filter('rest_prepare_post', function($response) {
$response->data['acf'] = get_fields($response->data['id']);
return $response;
});
Run Code Online (Sandbox Code Playgroud)
<PHP 5.3
add_filter('rest_prepare_post', 'append_acf');
function append_acf($response) {
$response->data['acf'] = get_fields($response->data['id']);
return $response;
};
Run Code Online (Sandbox Code Playgroud)
请注意,该过滤器是通配符过滤器,适用于
apply_filters("rest_prepare_$type", ...
Run Code Online (Sandbox Code Playgroud)
因此,如果您有多种内容类型(自定义),则需要执行以下操作:
add_filter('rest_prepare_multiple_choice', 'append_acf');
add_filter('rest_prepare_vocabularies', 'append_acf');
function append_acf($response) {
$response->data['acf'] = get_fields($response->data['id']);
return $response;
};
Run Code Online (Sandbox Code Playgroud)
注意似乎每个记录rest_prepare_x都会调用它。因此,如果您要对索引端点执行ping操作,它将被多次调用(因此您无需检查其发布还是发布)
| 归档时间: |
|
| 查看次数: |
20627 次 |
| 最近记录: |