Add Category Name to REST API

时间:2018-11-01 作者:user9664977

我正在使用URL:http://website-url.com/wp-json/wp/v2/qd_leadership 获取该自定义帖子类型的数据。然后,我为这种帖子类型创建了自定义分类法。它仅在JSON对象中显示分类ID,如下所示:

"sub_brand": [
  28,
  29,
  30
],
"service_area": [
  31,
  32,
  33
],
"location": [
  34,
  35,
  36
],
有没有办法向wordpress REST API添加其他信息,以便同时添加分类名称及其ID?

1 个回复
SO网友:Timothy Jacobs

API响应设计为仅返回ID。然后,您可以获取每个术语的完整信息。当然,提出几十个请求并不是很有效。因此,RESTAPI具有嵌入资源的概念。

如果您提出请求,但包括_embed=1 在您的URL中,WordPress将为您的每个学期发出这些请求。因此,例如,在获取帖子时,您将看到以下响应正文。

{
  "categories": [
    1
  ],
  "tags": [],
  "_embedded": {
    "wp:term": [
      [
        {
          "id": 1,
          "link": "https:\\/\\/app.test\\/category\\/uncategorized\\/",
          "name": "Uncategorized",
          "slug": "uncategorized",
          "taxonomy": "category",
        }
      ]
    ]
  }
}
来自任何分类法(包括自定义分类法)的术语将包含在_embedded[wp:term] 大堆这也适用于自定义post类型端点。

不幸的是,您必须手动遍历该数组,以找到每个ID的嵌入项sub_brand, service_arealocation. 我建议首先遍历所有术语,然后构建一个由每个术语的ID设置关键字的对象,以获得更好的性能。

const termObjects = {};

for ( const taxonomyTerms of response._embedded[ \'wp:term\' ] ) {
    for ( const term of taxonomyTerms ) {
        termObjects[ term.id ] = term;
    }
}

function getTerms( taxonomy, response, termObjects ) {
    const terms = [];

    for ( const termId of response[ taxonomy ] ) {
        terms.push( termObjects[ termId ] );
    }

    return terms;
}

const locations = getTerms( \'location\', response, termObjects );

结束