【问题标题】:Wordpress media_sideload_image - Download http://placekitten.com/100/100?Wordpress media_sideload_image - 下载 http://placekitten.com/100/100?
【发布时间】:2012-12-06 22:23:33
【问题描述】:

media_sideload_image

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

我接受这样的图片网址:

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

重写的网址

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

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 以将图像附加到媒体库?

【问题讨论】:

    标签: image wordpress url-rewriting download media


    【解决方案1】:

    我昨天在需要这个解决方案时阅读了您的问题。 我会在 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 ";
        }
    

    【讨论】:

    • 这真的很有帮助!只要名称和类型定义正确,文件名上没有扩展名并不重要。
    【解决方案2】:

    深入研究核心,您似乎需要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.' ));
    

    根据Roles and Capabilities documentation

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

    define( 'ALLOW_UNFILTERED_UPLOADS', true );
    

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        相关资源
        最近更新 更多