博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黄聪:WordPress: 使用 wp_insert_attachment 上传附件
阅读量:6937 次
发布时间:2019-06-27

本文共 2282 字,大约阅读时间需要 7 分钟。

我们来研究一下如何在主题或者插件的开发中上传附件:

主要参考这个函数:

下面先主要描述一下流程,假如我们通过一个这个样的表单上传了一张图片:

 

那么我们在后台可以通过 $_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 这个函数的文档指引,我们需要作如下几步:

  1. 将文件移动到目标的位置
  2. 生成所需的配置,然后调用 wp_insert_attachment
  3. 插入附件的 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 );

 

 

(转自:http://www.tuicool.com/articles/3yuEBb6)

转载地址:http://jgpjl.baihongyu.com/

你可能感兴趣的文章
LeetCode 637. Average of Levels in Binary Tree
查看>>
docker swarm集群挂载宿主机目录
查看>>
pandas.DataFrame.merge
查看>>
jQuery基础,定时器,工厂函数
查看>>
20131105
查看>>
数据结构与算法面试题80道(19)
查看>>
html5菜单折纸效果
查看>>
收藏一下,虽然很多东西还没接触到
查看>>
解决Titanium Tab组件click事件在iOS中不生效的方案
查看>>
SQL 常用临时表及区别
查看>>
iptables防火墙的原理及应用
查看>>
[LeetCode] Plus One 解题报告
查看>>
Genome-wide Complex Trait Analysis(GCTA)-全基因组复杂性状分析
查看>>
贪吃蛇闪烁现象
查看>>
NOIP 2014 D1T1 -生活大爆炸版石头剪刀布
查看>>
浅谈android反调试之轮询TracePid(解决方案是特色)
查看>>
GO 基础学习笔记(4)| 参数传递
查看>>
[转]熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)
查看>>
VS基本教程
查看>>
Jmeter也能IP欺骗!
查看>>