从URL上传图片


20

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

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

在此处输入图片说明

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

如何将上传文件字段简单地添加到媒体上传器的新标签中?

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

谢谢。


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

2
不是功能请求。该功能已经内置的。
特拉维斯Pflanz

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

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

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

Answers:


24

您可以编写一个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年

我想我添加的图片与您发布的一样。午餐回来后,我将进行更深入的研究。谢谢你的协助!一直很感激。
特拉维斯·普弗兰兹

file_get_contents如果allow_url_fopen在URL 中禁用URL的用法将不起作用php.ini- wp_remote_get在不同的WP环境中将具有更高的兼容性
highvolt

您好,感谢的答案,什么是wp_generate_attachment_metadatawp_update_attachment_metadata
gdfgdfg

12

您可以使用功能download_url()wp_handle_sideload()

download_url()

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

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后端的“媒体库”时,找不到任何位置,它也不会显示在搜索中。我确保它具有正确的权限,但仍然没有运气。有什么理由不会出现?
尼克

它不会在管理端添加条目。如果要在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

它根本不起作用
Cameron A

5

WordPress插件目录- 抓取并保存

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

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


1

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

  1. Grab and Save Plugin,这是另一个答案中提到的。该插件有些陈旧,可以直接保存文件,因此不会创建不同大小的缩略图。在撰写本文时,是2年前的最新更新。

  2. 导入外部图像插件可以批量导入远程链接的图像。您可能需要增加您的PHP内存限制才能起作用。在撰写本文时,是2年前的最新更新。

  3. 从URL插件保存并导入图像使用本机功能导入图像,因此可以在媒体库中正确创建图像并制作所有缩略图等。此插件的最新更新于2016年,可与WordPress 4.7一起使用

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.