使用REST API上传媒体

时间:2016-06-11 作者:Diario de Morelia

我在使用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"
  );

1 个回复
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() 将生成所有需要的附件数据和元数据。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果