我正在尝试编写一个插件,在激活时,它以编程的方式完成将图像上传到uploads目录所需的一切工作。换句话说:如果您在Add New媒体库屏幕上手动执行图像的拖放操作,它将完成所有可能发生的事情:

详细信息:
uploads目录中)。uploads目录中。post of post_type,等于attachmentpostmeta记录
示例:
附件似乎根本无法做到这一点,因为图像必须已经存在于上载目录中。
# Below is a comment from the wp_insert_attachment example:
// $filename should be the path to a file in the upload directory这个职位只是说这在wp_insert_attachment中是不可能的,但并没有提供解决方案。
Question(s):
谢谢!
发布于 2019-07-17 18:57:43
我看到你在引用你服务器的桌面。确保您要加载的文件可由WordPress应用程序用户访问!
如果您必须以编程的方式完成这个任务,那么看起来media_handle_sideload可能会做到这一点。功能与media_handle_upload相同,但我不认为它需要POST请求才能像media_handle_upload那样激活它。
因此,第1步:将文件移动到WordPress应用程序可以访问的位置(比如WordPress/uploads)。
步骤2:抓取您需要“上载”的文件的url (类似于host/wp/uploads/Image.jpg)
步骤3:找出图像需要引用的post Id,并使用media_handle_sideload来验证和存储文件(下面是来自Wordpress代码库的代码片段)
<?php
// Need to require these files
if ( !function_exists('media_handle_upload') ) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
$url = "http://s.wordpress.org/style/images/wp3-logo.png";
$tmp = download_url( $url );
if( is_wp_error( $tmp ) ){
// download failed, handle error
}
$post_id = 0;
$desc = "The WordPress Logo";
$file_array = array();
// Set variables for storage
// fix file filename for query strings
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png)/i', $url, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// do the validation and storage stuff
$id = media_handle_sideload( $file_array, $post_id, $desc );
// If error storing permanently, unlink
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
}
$src = wp_get_attachment_url( $id );
?>发布于 2019-07-17 14:17:58
如果您的文件已经在服务器上,但它还没有在wordpress中设置路径(即您无法从web浏览器浏览到它),则有一个名为“从服务器添加”的插件,它打开一个连接到您的服务器的微型文件浏览器窗口,然后在您的WordPress实例中创建数据库记录到驻留在服务器上的文件,以便您可以在wp-admin上的媒体浏览器中将它们拉上来。
警告,这个插件是一个安全风险,因为插件本质上是获得文件访问您的the服务器的目录。如果您必须将大量文件大容量上传到WordPress,并且它们已经在服务器上,我将安装插件,为文件创建数据库记录,然后立即停用并卸载插件!
发布于 2019-07-16 21:01:43
你在找media_handle_upload。然后,您可以使用wp_update_attachment_metadata。
以下是一个基本版本:
<?php
// Use 0 as your post ID if you don't want to attach it to any post
$image = media_handle_upload($file, $post_id);
wp_update_attachment_metadata( $image, $data );
?>您可以看到一个更高级的版本在这里使用前端形式。
如果从URL上传图像,您也可以使用media_handle_sideload。
https://stackoverflow.com/questions/57064696
复制相似问题