我知道可以通过输入URL直接从URL上传和处理图像单击“上载/插入媒体>>从计算机>>选择文件”后,将图像URL放入“文件名”框中。
这是一个很棒的功能,但并不广为人知(我实际上只是发现了它)。我想要更像SE的东西,其中有一个选项可以让用户知道添加图像URL。
我该如何简单地将上载文件字段添加到媒体上载器的新选项卡?
这里是有关如何在媒体上载中添加新选项卡的教程页面,但我只想向该标签添加一些文本和文件上传字段。有任何想法吗?我在WordPress Codex中找不到与此功能或文件上传字段直接相关的任何内容。
谢谢。
#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
评论
功能请求属于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响应)。