2016-05-09 32 views
0

我使用以下插件擺脫WordPress的REST API JSON數據:嵌套ACF JSON數據與自定義後類型

  • 高級自定義字段PRO(5.3.7)
  • WP REST API(2.0-beta13)
  • ACF以REST API(2.2.0)
  • 自定義文章類型UI(1.3.4)

我有一個自定義後鍵入 「案例研究」,隨着銅的創建stom Post Type 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

從看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); 
0
add_filter('json_prepare_post', function ($data, $post, $context) { 
    $data['acf'] = get_fields($post['ID']); 
    return $data; 
}, 10, 3); 
+0

雖然這個代碼塊可能會回答這個問題,但最好能提供一些解釋爲什麼它會這樣做。 – Rakete1111

0

我改變的最後一個版本(V3)get_fields的論點,我刪除了$響應$對象,現在我們只有這些參數:$數據$ 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; 
}); 

通配符{類型}可以是:交|頁面|用戶|評論|附件|自定義帖子類型|分類標準