关于wordpress rest api的一个小问题

WordPress 提供了原生的REST API,其访问地址类似于 yourdomain.com/wp-json/wp/v2/posts,该默认接口提供了诸多详细信息,亦可以同时添加参数对数据进行筛选,比如:$queryStr = home_url().'/wp-json/wp/v2/media?_embed&parent=0&media_type='.$media_type;,因此使用起来较为方便。查看handbook:https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/.

我们可以通过rest_api_init钩子对该接口进行定制:

add_action( 'rest_api_init', 'add_thumbnail_to_JSON' );
function add_thumbnail_to_JSON() {
//Add featured image
register_rest_field( 
    'attachment', // Where to add the field (Here, blog posts. Could be an array)
    'featured_image_src', // Name of new field (You can call this anything)
    array(
        'get_callback'    => 'get_image_src',
        'update_callback' => null,
        'schema'          => null,
         )
    );
}

function get_image_src( $object, $field_name, $request ) {
  $feat_img_array = wp_get_attachment_image_src(
    $object['featured_media'], // Image attachment ID
    'medium',  // Size.  Ex. "thumbnail", "large", "full", etc..
    true // Whether the image should be treated as an icon.
  );
  return $feat_img_array[0];
}

我们可以使用类似这样的方式来使用它:/wp-json/wp/v2/media?_fields=featured_image_src,title,link&page=1&&per_page=10。不过还需要注意,如果你为附件开启了缩略图功能,你应该将$object['featured_media']替换为get_post_thumbnail_id()

除了使用官方的api接口,也可以通过自定义新的接口来定制数据输出方式。