作为一个 PHP 开发者,做一个上传文件的功能其实还是挺简单的,但是如果仅仅是上传没有插入媒体库,那么日后我们就无法管理上传的文件,这篇文章为大家讲解使用 wp_insert_attachment 上传附件并插入媒体库里面。
下面先主要描述一下流程,假如我们通过一个这个样的表单上传了一张图片:
<form id="form_register" method="post" enctype="multipart/form-data"> <input id="upload_image" type="file" name="register_form_image" accept="image/*" /> </form>
那么我们在后台可以通过 $_FILE[‘register_form_image’] 来获取到这个上传的文件:
array (size=5) 'name' => string '14249903_1.jpg' (length=14) 'type' => string 'image/jpeg' (length=10) 'tmp_name' => string 'D:\upupw\temp\phpDE28.tmp' (length=25) 'error' => int 0 'size' => int 106422
根据 wp_insert_attachment 这个函数的文档指引,我们需要作如下几步:
将文件移动到目标的位置
生成所需的配置,然后调用 wp_insert_attachment
插入附件的 MetaData
先做第一步:将文件移动到目标的位置
我们可以通过调用 wp_upload_dir() 函数来获得目标上传路径的信息,大概是这个样子:
array (size=6) 'path' => string 'D:\app\mysite/wp-content/uploads/2015/05' (length=39) 'url' => string 'http://mysite/wp-content/uploads/2015/05' (length=39) 'subdir' => string '/2015/05' (length=8) 'basedir' => string 'D:\app\mysite/wp-content/uploads' (length=31) 'baseurl' => string 'http://mysite/wp-content/uploads' (length=31) 'error' => boolean false
然后我们就来把 $_FILES 的临时文件移动过去。
// 获取上传目录信息 $wp_upload_dir = wp_upload_dir(); // 将上传的图片文件移动到上传目录 $basename = $file['name']; $filename = $wp_upload_dir['path'].'/'.$basename;rename($file['tmp_name'], $filename);
第二步:指定配置并调用 wp_insert_attachment ,插入attachment 的 post。
这里的配置有五个参数,第一个是 guid ,这个是外部链接的 url,看下面的代码可以明白;第二个是 post_mime_type ,根据上传时传递的 mime 类型输入即可;第三个是标题,采用去除扩展名之后的文件名;第四个是文章内容,留空,第五个post_status 取值为 inherit;
// Prepare an array of post data for the attachment. $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . $basename, 'post_mime_type' => $file['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', $basename ), 'post_content' => '', 'post_status' => 'inherit');
然后是调用 wp_insert_attachment ,注意,第一个参数就是上面的选项数组,第二个参数是第一步指定的文件路径,第三个是这个附件“附加到”的文章 ID;
// 注意这个是为了说明第三个参数的意义,附件有一个“附加到”的属性,需要从这里指定附加到哪个文章 global $post; $parent_post_id = $post->ID; // 插入附件信息 $attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );
第三步:这里需要有些收尾工作
参照文档照做即可。
// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once( ABSPATH . 'wp-admin/includes/image.php' ); // Generate the metadata for the attachment, and update the database record. $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data );
未经允许不得转载:WordPress组织 » WordPress前端上传图片插入媒体库
评论前必须登录!