我在使用JSON REST API将媒体上载到WordPress站点时遇到问题。
使用下面的代码,我可以上传照片,但没有为它们分配任何信息,甚至连名称都没有-事实上,名称会自动变成URL和文件名(没有扩展名)。
$username = "ZX";
$password = "ZX";
$host = \'http://ZX.com/wp-json/wp/v2/media\';
$data = json_encode($data);
$file = \'/Users/xx.png\';
$imagedata = file_get_contents($file);
$process = curl_init($host);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_TIMEOUT, 50);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_HTTPHEADER, array(\'Content-Type:image/png\',\'Content-Disposition:attachment;filename=\'.$file));
$return = curl_exec($process);
print_r($return);
我如何将以下数据分配给上传?
$data = array(
"status" => "draft",
"title" => "Photo media",
"description" => "Photo media1",
"media_type" => "image",
"alt_text" => "alternate text"
);
SO网友:kaiser
这不可能通过API实现;你需要fetch the image yourself, 然后自己将数据发送到API。区块报价单
引用Ryan的话on the GitHub–issue 在@Dan(已删除)答案中提及
如何侧向加载图像请注意media_sideload_image()
返回值可以是的实例\\WP_Error
也然后,您只需将其附加到帖子上,这非常简单:
$media = media_sideload_image(
\'http://i.imgur.com/bcJvAj0.jpg\',
$post->ID,
\'Some image description\',
\'src\'
);
if ( ! empty( $media ) and ! is_wp_error( $media ) ) {
// reference new image to set as featured
$attachments = get_posts( [
\'post_type\' => \'attachment\',
\'posts_per_page\' => 1,
\'post_status\' => \'any\',
\'post_parent\' => $post->ID,
] );
if ( is_array( $attachments ) ) {
set_post_thumbnail( $post->ID, $attachments[0]->ID );
}
// Test print our image. The return value is the src of the sideloaded image.
printf( \'<img src="%s" />\', $media );
}
内部构件通过核心的简短回溯,解释了为什么应该坚持使用API:
看看media_sideload_image()
查看它使用download_url()
内部,使用wp_safe_remote_get()
, 包装器\\WP_HTTP::get()
. 这意味着它提供了整个WP API,同时非常安全、可调试且易于使用。的返回值download_url()
是的结果wp_tempnam()
, 这需要所有可能的/tmp
考虑到位置(有很多),并确保您的位置可写。这个media_handle_sideload()
将生成所有需要的附件数据和元数据。