4

media_sideload_image

WordPress 有一个名为media_sideload_image的函数。它用于上传图像并将其附加到媒体库。

我接受这样的图片网址:

h**p://s.wordpress.org/style/images/wp-header-logo.png

重写的 URL

网络上的一些 URL 被重写,例如:

http://placekitten.com/100/100

错误信息:

"抱歉,出于安全原因,不允许使用此文件类型。 "

文件类型是正确的 JPG 文件,但缺少文件扩展名。

在我的情况下,添加额外的 MIME 类型不起作用

我试过这个功能,但它对我没有帮助,因为它是未设置的文件扩展名。

add_filter('upload_mimes', 'add_custom_upload_mimes');
function add_custom_upload_mimes($existing_mimes){
    $existing_mimes['jpeg'] = 'image/jpeg';
    return $existing_mimes;
}

问题

如何上传带有 media_sideload_image 或类似名称的 URL h**p://placekitten.com/100/100 以将图像附加到媒体库?

4

3 回答 3

10

我昨天读了你的问题,当我需要这个解决方案时。我会在 24 小时后找到答案。

这是完整的解决方案

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

$image_url = "http://domain.com/blog/23092839823";
$image_tmp = download_url($image_url);

    if( is_wp_error( $image_tmp ) ){
        echo "<br> Image Download Fail:";
    }else {
        $image_size = filesize($image_tmp);
        $image_name = basename($image_url) . ".jpg"; // .jpg optional


        //Download complete now upload in your project
        $file = array(
           'name' => $image_name, // ex: wp-header-logo.png
           'type' => 'image/jpg',
           'tmp_name' => $image_tmp,
           'error' => 0,
           'size' => $image_size
        );


        //This image/file will show on media page...
        $thumb_id = media_handle_sideload( $file, $post_id, $desc);
        set_post_thumbnail($post_id, $thumb_id); //optional

        echo "<br> Image Save ";
    }
于 2015-11-19T20:24:33.670 回答
3

深入研究核心,您似乎需要该unfiltered_upload功能才能上传没有扩展名的文件:

if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) )
    return $upload_error_handler( $file, __( 'Sorry, this file type is not permitted for security reasons.' ));

根据角色和能力文档

默认情况下,此功能不适用于任何角色(包括超级管理员)。需要通过定义以下常量来启用该功能:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

定义此常量后,单个站点安装上的所有角色都将获得 unfiltered_upload 功能,但只有超级管理员将获得多站点安装上的功能。

于 2013-04-02T04:07:44.833 回答
2

今天我遇到了同样的问题,并想出了一个有点肮脏但成功的解决方法。事实证明,media_sideload_image 只检查 .jpg(或任何图像)在 url 中的扩展名,所以如果你将它添加到链接的末尾,它应该可以工作。

所以你只需要在 url 的末尾添加一些不会改变输出的东西,例如:

http://placekitten.com/100/100?name=image.jpg

我不能说它一直有效,但它在这里有效(已测试)。:)

于 2016-10-18T12:24:55.717 回答