我真的很喜欢SE从URL上传图像的方式(我敢肯定很多人会这样做!)。我一直在搜索,但是找不到,是否有类似的插件或方法可用于WordPress?

我知道可以通过输入URL直接从URL上传和处理图像单击“上载/插入媒体>>从计算机>>选择文件”后,将图像URL放入“文件名”框中。



这是一个很棒的功能,但并不广为人知(我实际上只是发现了它)。我想要更像SE的东西,其中有一个选项可以让用户知道添加图像URL。

我该如何简单地将上载文件字段添加到媒体上载器的新选项卡?

这里是有关如何在媒体上载中添加新选项卡的教程页面,但我只想向该标签添加一些文本和文件上传字段。有任何想法吗?我在WordPress Codex中找不到与此功能或文件上传字段直接相关的任何内容。

谢谢。

评论

功能请求属于trac.wordpress.org。

不是功能请求。该功能已内置。

@TravisPflanz在Windows上遇到了这个问题,并认为这是个天才-绝对改善了我的工作流程。知道在Mac中这样做吗? command + shift + g似乎不支持url,但是不确定是否还有其他命令。

从url上载而不是“在Windows filemanager中输入url”上的优点是,文件是直接从源文件加载到wordpress服务器的;在我的案例中,是通过托管中心的千兆位线路,而不是先下载到我的PC,然后再通过缓慢的移动连接运行到wordpress。

直接从URL“上载”的技巧在Windows 10中不起作用(在任何浏览器中-经过测试的Firefox,Chrome,IE11),并且自2012年以来可能在以前的Windows版本中不起作用。Windows将从URL下载文件到计算机上的临时位置,然后从那里上传。因此,不可能使用此技巧来“上传”大型视频文件(在PHP和WordPress甚至没有进行查找之前就绕过主机提供商的HTTP 413响应)。

#1 楼

您可以编写一个php脚本,或在此处制作此代码的自己的插件,我在其中一个我必须导入大量图像的项目中使用了它。

首先,获取图像,并将其存储在您的上载目录中:

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;

$contents= file_get_contents('http://mydomain.com/folder/image.jpg');
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);


之后,我们可以将图像插入媒体库中:

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );

$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data );


,瞧-我们来了。
您还可以在附件数组中设置其他各种参数。
如果您获得了网址数组或类似的内容,则可以运行脚本循环-但要注意,图像函数要花很多时间和内存来执行。

评论


哦,很抱歉,我最初没有看到图像。也许我会写一个做这个的小插件。我希望您到目前为止能与我的脚本相处融洽-我会让您发布插件新闻。

– fischi
2012年4月30日在17:07

我想我是在您发布时添加图片的。午餐回来后,我将做更深入的研究。感谢你的协助!一直很感激。

–Travis Pflanz
2012年4月30日17:53

如果在php.ini中禁用了allow_url_fopen,则无法将file_get_contents与URL一起使用-wp_remote_get将在不同的WP环境中具有更高的兼容性

–高电压
17-2-24在14:41

嗨,感谢您的回答,wp_generate_attachment_metadata和wp_update_attachment_metadata是什么?

– gdfgdfg
19年1月25日,0:32

很好,但是如何生成媒体库缩略图和多种图像尺寸呢?

–罗伯特·安德鲁斯
20年5月18日在20:35

#2 楼

您可以使用download_url()wp_handle_sideload()函数。

download_url()


使用WordPress HTTP类将URL下载到本地临时文件。请注意,调用函数必须取消链接()文件。


wp_handle_sideload()


处理侧载,这是检索媒体项的过程。从另一台服务器而不是传统媒体上载。此过程涉及清理文件名,检查mime类型的扩展名以及将文件移至上载目录中的相应目录。


示例:

// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL to the WordPress logo
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Download file to temp dir
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Array based on $_FILE as seen in PHP file uploads
    $file = array(
        'name'     => basename($url), // ex: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Tells WordPress to not look for the POST form
        // fields that would normally be present as
        // we downloaded the file from a remote server, so there
        // will be no form fields
        // Default is true
        'test_form' => false,

        // Setting this to false lets WordPress allow empty files, not recommended
        // Default is true
        'test_size' => true,
    );

    // Move the temporary file into the uploads directory
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Insert any error handling here
    } else {

        $filename  = $results['file']; // Full path to the file
        $local_url = $results['url'];  // URL to the file in the uploads dir
        $type      = $results['type']; // MIME type of the file

        // Perform any actions here based in the above results
    }

}


评论


我使用此代码,它成功地将图像添加到了上载目录中,但是当我转到Wordpress后端的媒体库时,我在任何地方都找不到它,并且它不会显示在搜索中。我确保它具有正确的权限,但仍然不走运。有什么理由不会出现?

–尼克
18年6月14日在23:05

它不会在管理端添加条目。如果要在admin中添加条目,则最好使用wp_insert_attachment();。 codex.wordpress.org/Function_Reference/wp_insert_attachment,也可以通过修改$ _FILES全局变量来使用它。 media_handle_upload(); codex.wordpress.org/Function_Reference/media_handle_upload

–拉吉什(Rajilesh Panoli)
18年6月20日14:31



它根本不起作用

– iKamy
19年5月8日在7:43

#3 楼

WordPress插件目录-抓取并保存


该插件可让您从远程URL抓取图像并将其保存到您自己的wordpress媒体库中。这样,您就不必担心
远程映像是否被其所有者删除了。这也节省了您
将图像下载到本地计算机并再次上传到自己的
wordpress的步骤。

抓取图像后,wordpress会提示您“插入
放入帖子”或“更改属性”,就像您上传图片后一样。


#4 楼

至少有三种将远程图像导入WordPress的方法:


Grab and Save Plugin,另一个答案中提到。该插件有些陈旧,可以直接保存文件,因此不会创建不同大小的缩略图。撰写本文时,最新更新时间为2年前。
导入外部映像插件具有批量导入功能,用于远程链接的映像。您可能需要增加您的PHP内存限制才能起作用。在撰写本文时,最新更新超过2年前。
从URL插件保存和导入图像插件使用本机功能导入图像,因此可以在媒体库中正确创建图像并制作所有缩略图等。该插件的最新更新时间为2016年,可与WordPress 4.7一起使用。

披露:我从URL插件创建了“保存并导入图像”

评论


谢谢!您知道与当前Wordpress版本(5.4)兼容的插件吗?

– cduguet
20-4-10上午10:49