WordPress需要提供了REST API,但是有时候并不能完全满足我们的需求,比如他会把文章里好多我们用不到的数据显示出来,同时还不能显示自定义字段的数据,那么这个时候我们就需要对WordPress REST API的输出数据做定制化的修改和调整。
// https://devework.com/wordpress-rest-api-dynamic-output.html function dw_rest_prepare_post( $data, $post, $request ) { $_data = $data->data; $params = $request->get_params(); // if ( ! isset( $params['id'] ) ) { unset( $_data['excerpt'] ); unset( $_data['author'] ); unset( $_data['featured_media'] ); unset( $_data['format'] ); unset( $_data['ping_status'] ); unset( $_data['comment_status'] ); unset( $_data['sticky'] ); unset( $_data['template'] ); // } $data->data = $_data; return $data; } add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
可能考虑到数据隐私,文章数据(posts)默认并不显示post meta的相关字段,如果你需要输出对应文章下所有 post meta 字段,可以用下面的代码启用:
// https://devework.com/wordpress-rest-api-dynamic-output.html register_rest_field( 'post', 'metadata', array( 'get_callback' => function ( $data ) { return get_post_meta( $data['id'], '', '' ); }, ));
接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:
// https://devework.com/wordpress-rest-api-dynamic-output.html function dw_rest_prepare_post( $data, $post, $request ) { $_data = $data->data; $params = $request->get_params(); $thumb = get_post_meta( $post->ID, 'thumb' ); if($thumb){ $_data['thumb_image'] = $thumb; } $data->data = $_data; return $data; } add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
上面的代码展示的是如何输出thumb 这个 post meta 字段,请按需使用。
最后,铬元素提示,大家增加自定义字段是可以的,但不太建议删减,因为有些插件是使用rest api的,如果随意删减,可能到时候会出错,找起来可就麻烦了。