Download_url()显示为灰色图标

时间:2017-03-08 作者:DSX

我尝试使用命令从不同网站的url下载图片download_url($url, $timeout) 将其放入媒体库。之后,我做了一个wp_handle_sideload($file, $overrides).

$temp_file = download_url( $url, 5 );
$file = array(
     \'name\'     => basename($url),
     \'type\'     => \'image/jpg\',
     \'tmp_name\' => $temp_file,
     \'error\'    => 0,
     \'size\'     => filesize($temp_file),
);
$overrides = array(
     \'test_form\' => false,
     \'test_size\' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );
文件下载正确,但在库中显示为灰色图标。但是如果我打开带有链接的文件,图片就可以了。

grey icons

这是下载图片的正确方法吗?下载完成后,我想将媒体作为缩略图关联到帖子。我认为wp_insert_attachment()set_post_thumbnail() 功能。

谢谢

1 个回复
最合适的回答,由SO网友:dweipert 整理而成

使用时wp_handle_sideload 正如@xvilo在评论中指出的那样,它并没有创建wordpress在媒体库中显示图像所需的元数据。因为我看不到wp_handle_sideload 函数正在将数据写入数据库,我不明白为什么文件会显示在媒体库中。因此,在你的方法中,你错过了wp_insert_attachment (正如你自己所说)和wp_generate_attachment_metadata.

$temp_file = download_url( $url, 5 );
$file = array(
     \'name\'     => basename($url),
     \'type\'     => \'image/jpg\',
     \'tmp_name\' => $temp_file,
     \'error\'    => 0,
     \'size\'     => filesize($temp_file),
);
$overrides = array(
     \'test_form\' => false,
     \'test_size\' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );

// Write attachment to db
$attachment = [
    \'post_title\' => basename($results[\'file\']),
    \'post_content\' => \'\',
    \'post_status\' => \'inherit\',
    \'post_mime_type\' => $results[\'type\'],
];
$attachment_id = wp_insert_attachment( $attachment, $results[\'file\'] )

// Generate the attachment\'s meta data
wp_generate_attachment_metadata( $attachment_id, $results[\'file\'] );
或者您可以使用media_handle_sideload 函数,因为这个函数已经为您完成了。

$attachment_id = media_handle_sideload( $file_array, 0 );
之后,您可以使用

set_post_thumbnail( $post, $attachment_id );

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。