Wordpress WP REST API如何上传特色图片?
我正在使用WP-restapi插件V2() API能否上传特色图片并生成相关元数据 我知道我可以上传一个图片附件(POST/wp-json/wp/v2/media),然后更新相关文章(PUT/wp-json/wp/v2/posts/ID),并将其“特色图片”的关键点指向附件ID 但这是正确的方法吗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的帖子。 我通
上传后是否可以生成不同(调整大小)版本的特色图像,或者这是否需要自定义端点 是的,这个插件解决了这个问题。请参阅我最近的帖子和答案:
我通过上传图像(爱奥尼亚手机)创建了一个带有图像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文档在解释所有这些方面“有点”欠缺。其中涉及到相当多的挫折感,但最终这正是我让它工作的方式
因此,首先将媒体上传到endpointPOST/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