5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 171|回复: 2

[RestAPI] WordPress REST API里增加特色图片地址 缩略图

[复制链接]

654

主题

766

帖子

7444

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7444
发表于 2021-6-3 08:43:39 | 显示全部楼层 |阅读模式
最近用到的一个小东西,使用wordpress里的REST API时发现在post返回的JSON数据里只返回了特色图片的ID:featured_media,却没有直接返回图片地址,根据ID再去找地址很麻烦,所以干脆直接在接口里增加一个返回值算了。

代码如下:

  1. //API中添加特色图片
  2. function post_fetured_image_json( $data, $post, $context ) {
  3.         $featured_image_id = $data->data['featured_media']; // 获取图片ID
  4.         $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // 获取图片地址

  5.         if( $featured_image_url ) {
  6.                 $data->data['thumbnailurl'] = $featured_image_url[0];
  7.         }

  8.         return $data;
  9. }
  10. add_filter( 'rest_prepare_post', 'post_fetured_image_json', 10, 3 );
  11. 添加到functions.php就好
复制代码


然后调用文章列表时,使用thumbnailurl字段
回复

使用道具 举报

654

主题

766

帖子

7444

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7444
 楼主| 发表于 2021-6-14 08:50:41 | 显示全部楼层
高级版本,同时去掉不需要的字段

  1. function dw_rest_prepare_post( $data, $post, $request ) {
  2.    $_data = $data->data;
  3.    $params = $request->get_params();
  4.    if (has_post_thumbnail($data)) {
  5.       //如果有特色缩略图,则输出缩略图地址
  6.       $image = wp_get_attachment_image_src( get_post_thumbnail_id($_data['id']), 'full' );
  7.       $post_thumbnail_src = $image[0];
  8.    } else {
  9.       @$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  10.       if (!empty($matches[1][0])) {
  11.          global $wpdb;
  12.          $att = $wpdb->get_row($wpdb->prepare("SELECT ID,guid FROM $wpdb->posts WHERE guid LIKE '%s'", $matches[1][0]));
  13.          if ($att) {
  14.             $post_thumbnail_src = $att->guid;
  15.          } else {
  16.             $post_thumbnail_src = $matches[1][0];
  17.          }
  18.       } else {
  19.          // 默认图片路径
  20.          $post_thumbnail_src = null;
  21.       }
  22.    }
  23.    $_data['thumbnailurl'] = $post_thumbnail_src;
  24.    // if ( ! isset( $params['id'] ) ) {
  25.    unset( $_data['excerpt'] );
  26.    unset( $_data['author'] );
  27.    unset( $_data['featured_media'] );
  28.    unset( $_data['format'] );
  29.    unset( $_data['ping_status'] );
  30.    unset( $_data['comment_status'] );
  31.    unset( $_data['sticky'] );
  32.    unset( $_data['template'] );
  33.    // }
  34.    $data->data = $_data;
  35.    return $data;
  36. }
  37. add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
复制代码
回复 支持 反对

使用道具 举报

654

主题

766

帖子

7444

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7444
 楼主| 发表于 2021-6-14 08:52:02 | 显示全部楼层
在上方代码里有一处 获取图片的函数 wp_get_attachment_image_src
详情:http://bbs.5ucms.com/thread-888-1-1.html
可以根据实际情况,设置成获取小图 中图 大图
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2021-7-29 14:22 , Processed in 0.270468 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表