问题描述
我需要您的帮助,通过 Wp-rest-api v2 和 Oauth2 认证在我的 wordpress 博客上上传媒体图像。
我没有在 REST API 文档中找到发送我的图像数据 (字段名称,发送模式…?) 的方式。
require('OAuth2/Client.php');
require('OAuth2/GrantType/IGrantType.php');
require('OAuth2/GrantType/AuthorizationCode.php');
const CLIENT_ID = 'XXX';
const CLIENT_SECRET = 'XX';
const REDIRECT_URI = 'http://127.0.0.1/test_api_wp/test.php';
const AUTHORIZATION_ENDPOINT = 'http://wordpress.local/oauth/authorize';
const TOKEN_ENDPOINT = 'http://wordpress.local/oauth/token';
$client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET);
if (!isset($_GET['code']))
{
$auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
header('Location: ' . $auth_url);
die('Redirect');
}
else
{
$params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
$response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params); //authorization_code
$token = $response['result']['access_token'];
$client->setAccessToken($token);
$client->setAccessTokenType(OAuth2Client::ACCESS_TOKEN_BEARER);
}
$values = array(
"date" => "2015-11-26 10:00:00",
"date_gmt" => "2015-11-26 09:00:00",
"modified" => "2015-11-26 10:00:00",
"modified_gmt" => "2015-11-26 09:00:00",
"status" => "future",
"title" => "Titre media",
"description" => "description media",
"media_type" => "image",
"source_url" => "https://www.base64-image.de/build/img/mr-base64-482fa1f767.png"
);
$data = $client->fetch("wordpress.local/wp-json/wp/v2/media", $values, "POST");
echo "<pre>";print_r($data);echo "</pre>";
响应 :
Array
(
[result] => Array
(
[code] => rest_upload_no_data
[message] => No data supplied
[data] => Array
(
[status] => 400
)
)
[code] => 400
[content_type] => application/json; charset=UTF-8
)
任何想法?非常感谢
最佳解决方案
所以!这个很有趣。
请记住,WP-API 还是非常非常非常 work-in-progress 。
Content-Disposition
我发现 an issue reported on the WP-API issue queue 关于 Content-Disposition 。这是发布新媒体内容所需的标题,而在以正确格式提供这些内容时,有一些非常非常严格的要求。
创建媒体端点的目的
首先,让我们退一步。该 API 假定您已经将新文件上传到正确的目录。此端点正在数据库中创建引用此文件的媒体内容。
解决方案
您必须指定要与新内容关联的媒体文件的文件名。这不能是远程 URL 。从 v2 documentation 可以看出,source_url
和 link
是 read-only 。所有您要做的成功提交您的新内容,请将以下内容添加到标题中:
'Content-Disposition' => 'filename=name-of-file.jpg',
如票中所述,您不能添加引号或指定您用于发送文件的方法。它必须是上面的格式。至少,直到他们改变它才是这种情况。
为了纪录,当我终于想到这一个出来的时候,我笑了起来,吓得我的妻子感到害怕。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。