您可以通过rest_prepare_{$this->post_type} 过滤器,类似于自定义帖子类型的过滤器test_cpt (注册于hierarchical 和show_in_rest 设置为true):
add_filter( \'rest_prepare_test_cpt\', \'rest_prepare_test_cpt\' );
function rest_prepare_test_cpt( WP_REST_Response $response ) {
$data = $response->get_data();
if ( ! empty( $data[\'parent\'] ) ) {
if ( ! $parent_post = get_post( $data[\'parent\'] ) ) {
return $response;
}
// Include only some post data.
$data[\'parent_data\'] = [
\'title\' => get_the_title( $parent_post ), // or just $parent_post->post_title
\'excerpt\' => get_the_excerpt( $parent_post ), // or just $parent_post->post_excerpt
\'link\' => get_permalink( $parent_post ),
];
// Or include the whole data..
// $data[\'parent_data\'] = $parent_post; // object
// $data[\'parent_data\'] = $parent_post->to_array(); // array
$response->set_data( $data );
}
return $response;
}
WP_REST_Response 扩展
WP_HTTP_Response 定义了
get_data() 和
set_data() 方法。
请注意,如果设置不同的rest_controller_class 注册帖子类型时。(默认控制器类为WP_REST_Posts_Controller 触发上面使用的过滤器)