用于显示高级自定义字段的JSON API - WordPress

SPi*_*lai 14 wordpress json

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

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

这些是以前字段的自定义字段的slug名称

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)


Myk*_*tes 8

通过搜索相同的问题来到这里.这还没有完全审查,但我认为这是正确的道路.看看这个.

我有一个比你更少的嵌套级别,这可能需要改变一点.但是JSON API插件有一个名为json_api_encode的过滤器.我有一个称为规格的转发器,看起来像这样.

http://d.pr/i/YMvv

在我的函数文件中,我有这个.

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函数在这里完美地用于恢复转发器值的数组.

希望这可以帮助!


Chr*_*ris 6

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操作,它将被多次调用(因此您无需检查其发布还是发布)


Blo*_*sie 5

现在有一个小插件可以为您添加过滤器.

https://github.com/PanManAms/WP-JSON-API-ACF