1、前端使用form表单

//单文件上传,我的业务需求中限制了必须上传图片
<input type="file" name="singlename" accept="image/*">
//多文件上传
<input type="file" name="multiename[]" multiple="multiple">
//注意同时应该是form节点上加上enctype="multipart/form-data"属性,否则文件将无法上传

2、在上述form表单接收的页面使用$_FILES通过name可以获取到文件的相关参数

$singlefile = $_FILES['singlename'];
$multifiles = $_FILES['multiname'];

在这里,需要注意单个文件和多个文件的处理方式是不同的,处理方式参照第四步,我们通过print_r到前端可以看到其格式

//这是单个文件的输出结果
Array (
[name] => 12345677889.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phptyS5oO
[error] => 0 [size] => 32920
)
//这是多个文件的输出结果
Array (
[name] => Array (
[0] => 12345677889.jpg
[1] => attach_ico.png
)
[type] => Array (
[0] => image/jpeg
[1] => image/png
)
[tmp_name] => Array (
[0] => /tmp/phpDXQEa5
[1] => /tmp/php3Q09Xd
)
[error] => Array (
[0] => 0
[1] => 0
)
[size] => Array (
[0] => 32920
[1] => 1864
)
)  

3、自定义函数调用Wordpress内置上传附件的函数media_handle_upload

function my_handle_attachment($file_handler,$post_id,$set_thu=false) {
// check to make sure its a successful upload
if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
$attach_id = media_handle_upload( $file_handler, $post_id );
if ( is_numeric( $attach_id ) ) {
update_post_meta( $post_id, '_my_file_upload', $attach_id );
}
return $attach_id;
}

4、调用自定义函数即可完成上传 

如果是单个文件那么我们的调用将会很简单

$attachment_id = my_handle_attachment('singlename',$you_post_id);

在这里我们需要注意,通过 第二步我们可以看到单个文件和多个文件的输出结果格式的差异,因此我们需要对多个文件进行一下处理,让他成为单个文件的格式以完成上传

$files = $_FILES["multiname"];
foreach ($files['name'] as $key => $value) {
if ($files['name'][$key]) {
$file = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'error' => $files['error'][$key],
'size' => $files['size'][$key]
);
$_FILES = array ("singlefile" => $file);
$attachment_id = my_handle_attachment('singlefile',$you_post_id);
}
}
}

  

 

Wordpress在主题或者插件中自定义存储附件的方法的更多相关文章

  1. Django 模型中自定义Manager和模型方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...

  2. WordPress 安装主题、插件时问题解决办法

    --当能够在外网访问到自己的博客时,很多人都会很兴奋吧!如果环境是自己配置的,而不是用的集成环境肯定也会有点小小的成就感. --但是在我兴奋的时候遇到了个小麻烦,下载插件提示我输入FTP信任凭据,输了 ...

  3. linux中syslog自定义存储路径的方法

    方法一: 1. su  //切换到root用户下2. cp /etc/sysconfig/rsyslog /etc/sysconfig/rsyslogbak //备份vim /etc/sysconfi ...

  4. wordpress安装主题、插件需要FTP用户名密码

    修改主目录wordpress下的wp-config.php文件,在最结尾加上 define("FS_METHOD", "direct"); define(&qu ...

  5. 转--Android中自定义字体的实现方法

    1.Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2.在Android中可以引入其他字体 . 复制代码 代码如下: <?xml versio ...

  6. Vue中自定义指令的使用方法!

    除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍然需要对普通 DOM ...

  7. 【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法

    问题描述 在App Service for Windows的环境中,当前只提供了PHP 7.4 版本的选择情况下,如何实现自定义PHP Runtime的版本呢? 如 PHP Version 8.1.9 ...

  8. WordPress主题设置插件,让你的站点有电脑、手机双主题

    我们建站的时候总是会优先考虑自适应的主题,但是与之对应,免费的自适应主题都调用国外公共资源,访问速度不太理想.加上wordpress未经优化之前,本身也没有极高的访问效率.所以大家可以下载这款“主题设 ...

  9. 6.1 如何在spring中自定义xml标签

    dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...

随机推荐

  1. JDK1.7配置及测试

    Windows 7 配置jdk 1.7环境变量 (网上找的,写的很清晰,保存下) 环境:win7(32位)      jdk1.7 1.右击计算机-属性-高级系统设置-高级-环境变量,弹出“环境变量” ...

  2. mapreduce 运行-指定各种运行参数

    mapreduce指定参数 mapreduce在运行的时候可以指定各种参数,这样可以根据实际的应用场景做一下相关的调整 1.指定运行时cpu的个数 hadoop jar hadoop-core-0.1 ...

  3. dojo 官方翻译 dojo/Deferred

    延迟,异步调用 官网地址:http://dojotoolkit.org/reference-guide/1.9/dojo/Deferred.html require(["dojo/Defer ...

  4. 二叉树、平衡二叉树、B-Tree与B+Tree

    本文总结自:https://blog.csdn.net/chuixue24/article/details/80027689 二叉树(B树,binary tree) 左子树的键值 < 根的键值 ...

  5. 20145219 《Java程序设计》第07周学习总结

    20145219 <Java程序设计>第07周学习总结 教材学习内容总结 认识时间与日期 时间的度量 1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身 ...

  6. BigDecimal相关整理

    bigdecimal类型四则运算: BigDecimal s = new Bigdecimal(5); BigDecimal x = new Bigdecimal(15); 依次为最基础的加减乘除: ...

  7. session/token/cookie/socket区别

    Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象 ...

  8. AtCoder Regular Contest 099

    AtCoder Regular Contest 099 C - Minimization 题意 题意:给出一个n的排列.每次操作可以使一段长度为K的连续子序列变成该序列的最小数.求最少几次使得整个数列 ...

  9. DataStage系列教程 (Pivot_Enterprise 行列转换)

    有人提到Pivot_Enterprise这个组件,之前没有用过,今天捣腾了会,写下来供以后参考,如果有什么不对的,还请多指出,谢谢! Pivot_Enterprise主要用来进行行列转换. 1 示例 ...

  10. Java多线程 - 线程同步

    多线程操作同一个对象时,容易引发线程安全问题.为了解决线程安全问题,Java多线程引入了同步监视器. 同步代码块 同步代码块语法格式如下: synchronized(obj){ //此处的代码即为同步 ...