Extending REST API responses

时间:2018-11-09 作者:Tom J Nowell

我有一个带有父帖子的自定义帖子类型,以及通过GET 请求,一切都很好。我使用的API端点是core在以下情况下提供的端点show_in_rest 注册时设置为true。

但是,我想了解更多关于父帖子的信息,而不是它的ID,我不想再次请求获取它,so how might I extend the response from the REST API to include that information? 或任何其他任意信息。

尤其是包含标题和URL会很好,但完整的post对象也会很好。请注意,我不想从头开始创建自定义端点,而是扩展现有的核心端点

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

您可以通过rest_prepare_{$this->post_type} 过滤器,类似于自定义帖子类型的过滤器test_cpt (注册于hierarchicalshow_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 触发上面使用的过滤器)

结束

相关推荐

Php致命错误:无法将WP_REST_RESPONSE类型的对象用作wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php中

我向WordPress添加了一个自定义端点,如下所示: add_action( \'rest_api_init\', function () { register_rest_route( \'menc/v1\', \'/crosscat/(?P[\\w-]+)/(?P[\\w-]+)\', array( \'methods\' => \'GET\', \'callback\' => \'dept_cat_api\',&#x