Wordpress WP REST API如何上传特色图片?

Wordpress WP REST API如何上传特色图片?,wordpress,rest,Wordpress,Rest,我正在使用WP-restapi插件V2() API能否上传特色图片并生成相关元数据 我知道我可以上传一个图片附件(POST/wp-json/wp/v2/media),然后更新相关文章(PUT/wp-json/wp/v2/posts/ID),并将其“特色图片”的关键点指向附件ID 但这是正确的方法吗 上传后是否可以生成不同(调整大小)版本的特色图像,或者这是否需要自定义端点 是的,这个插件解决了这个问题。请参阅我最近的帖子和答案: 我通过上传图像(爱奥尼亚手机)创建了一个带有图像id的帖子。 我通

我正在使用WP-restapi插件V2()

API能否上传特色图片并生成相关元数据

我知道我可以上传一个图片附件(POST/wp-json/wp/v2/media),然后更新相关文章(PUT/wp-json/wp/v2/posts/ID),并将其“特色图片”的关键点指向附件ID

但这是正确的方法吗


上传后是否可以生成不同(调整大小)版本的特色图像,或者这是否需要自定义端点

是的,这个插件解决了这个问题。请参阅我最近的帖子和答案:


我通过上传图像(爱奥尼亚手机)创建了一个带有图像id的帖子。 我通过检查来自wp-json/wp/v2/posts/id的json响应找到了秘密

在数据部分我看到了“特色媒体”,我读到我需要将“特色图像”设置为id,但这不起作用

所以我试着在我的帖子中设置“特色媒体”的值,效果很好

我什么都试过了,直到我试过这个才奏效

“post_meta”数组没有任何效果,但我把它放在了那里,因为在我能找到的(稀疏的)文档中,他们就是这么说的

以下是对我有效的方法:

$scope.http({
             method: "POST",
            url: "http://<domain>/wp-json/wp/v2/posts" ,
            headers: { 'Authorization' : 'Basic ' + $scope.au },
            data: {
            title: $scope.postData.title,
            content: $scope.postData.content,
            status: $scope.postData.status,
            featured_media: $scope.imageid,
            post_meta: [
                {
                    "key": "_thumbnail_id",
                    "value":  $scope.imageid
                }] 
            }
$scope.http({
方法:“张贴”,
url:“http:///wp-json/wp/v2/posts" ,
标题:{'Authorization':'Basic'+$scope.au},
数据:{
标题:$scope.postData.title,
内容:$scope.postData.content,
状态:$scope.postData.status,
特色媒体:$scope.imageid,
后置元:[
{
“键”:“\u缩略图\u id”,
“值”:$scope.imageid
}] 
}
我知道我可以上传一个图片附件(POST/wp-json/wp/v2/media),然后更新相关文章(PUT/wp-json/wp/v2/posts/ID),并将其“特色图片”的关键点指向附件ID。 但这是正确的方法吗

据我所知,这是一条路要走。WP API文档在解释所有这些方面“有点”欠缺。其中涉及到相当多的挫折感,但最终这正是我让它工作的方式

因此,首先将媒体上传到endpoint
POST/wp json/wp/v2/media
,并使用以下HTTP头和文件内容作为数据:

            'CURLOPT_HTTPHEADER' => [
            'Content-type: application/json',
            'Authorization: Basic ' . $base64Credentials,
            'Content-Disposition: attachment; filename="acme.png"'
            ]
这里的陷阱是内容处置头。 此调用应返回媒体ID,您现在需要该ID来调用
POST/wp json/wp/v2/posts/{$existingpostd}

相同的标题,但没有
内容配置
。 这次数据应该是JSON编码的
{“特色媒体”:156}


(您不必直接使用CURL。只需确保将HTTP头传递到请求中即可)

要在一个步骤中完成此操作,您可以在PHP中添加如下过滤器:

add_filter('rest_prepare_attachment', 'attach_media_to_post',10,3); 
function attach_media_to_post($response, $post, $request) {
    if($request->get_method()!='POST'){
        return $response;
    }       
    $parameters = $request->get_params();       
    if(isset($parameters['featured'])){
        set_post_thumbnail($parameters['featured'],$post->ID);
    }
    return $response;
}
http://yoursite.com/wp-json/wp/v2/media?featured=1234
因此,您的呼叫可以为post ID传递一个参数以连接媒体。如下所示:

add_filter('rest_prepare_attachment', 'attach_media_to_post',10,3); 
function attach_media_to_post($response, $post, $request) {
    if($request->get_method()!='POST'){
        return $response;
    }       
    $parameters = $request->get_params();       
    if(isset($parameters['featured'])){
        set_post_thumbnail($parameters['featured'],$post->ID);
    }
    return $response;
}
http://yoursite.com/wp-json/wp/v2/media?featured=1234

文件上传通过以下方式在我这边工作:

Method: POST
URL: https://domainname/wp-json/wp/v2/media
Body: form-data
    Key=file
    Value=attached file

Header:
     Content-Type: application/x-www-form-urlencoded

我必须说,对我来说,它可以将
特色媒体
设置为以前上传的媒体id。正如它应该工作一样。我遵循此建议,并获得错误
对不起,出于安全原因,不允许使用此文件类型
。文件名应具有允许的扩展名,例如
tmp
被e拒绝出于安全原因,不允许出现错误
,但允许出现
tmp.jpg
tmp.png
我认为在本例中,内容类型应为image/png,对于.jpg图像,内容类型应为iamge/jpeg