WordPress REST API v2 返回所有图像,而不仅仅是来自选定的帖子

Posted

技术标签:

【中文标题】WordPress REST API v2 返回所有图像,而不仅仅是来自选定的帖子【英文标题】:WordPress REST API v2 returning all images, not just from selected Post 【发布时间】:2020-02-26 07:06:57 【问题描述】:

我正在尝试通过编辑 functions.php 文件将一些字段添加到 REST API。由于我对 WP 没有太多经验,因此我研究了如何操作并想出了以下代码:

add_action( 'rest_api_init', 'add_images_to_JSON' );

function add_images_to_JSON() 
    register_rest_field( 
        'post',
        'images',
        array(
            'get_callback'    => 'get_images_src',
            'update_callback' => null,
            'schema'          => null,
             )
        );
    

    function get_images_src( $object, $field_name, $request ) 
        $args = array(
            'posts_per_page' => -1,
            'order'          => 'ASC',
            'orderby'        => 'menu_order',
            'post_mime_type' => 'image',
            'post_parent'    => $object->id,
            'post_status'    => null,
            'post_type'      => 'attachment',
            'exclude'        => get_post_thumbnail_id()
        );

        $attachments = get_children( $args );

        $images = [];
        foreach ($attachments as $attc)
            $images[] =  wp_get_attachment_thumb_url( $attc->ID );
        

       return $images;
    

问题在于,当我按类别获取帖子列表时,这将返回所有帖子中的所有图像,而不仅仅是与其相关的图像。我怎样才能使每个帖子只返回其相关图像?

【问题讨论】:

【参考方案1】:

试试这个:

function get_images_src( $object, $field_name, $request ) 
     $images = [];
     $post_images = get_attached_media('image', $object->ID);
     foreach($post_images as $image)  
          $images[] = wp_get_attachment_image_src($image->ID,'full');
     
     return $images;

【讨论】:

这几乎奏效了。 wp_get_attachment_image_src 返回了一个数组。我不得不在它后面加上 [0],但它似乎有效。谢谢!

以上是关于WordPress REST API v2 返回所有图像,而不仅仅是来自选定的帖子的主要内容,如果未能解决你的问题,请参考以下文章

使用 WP-API 节点模块时如何限制返回的 Wordpress REST-API 字段

WordPress REST API - 有没有办法在帖子响应中返回类别和父类别名称?

从 WordPress REST API 获取原始 HTML 输出

rest_cannot_create for none 管理员 wordpress api v2

从 WordPress REST API JSON 响应中提取图像 url

如何将嵌入查询与 wordpress rest api 一起使用?