Wordpress在主题或者插件中自定义存储附件的方法
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在主题或者插件中自定义存储附件的方法的更多相关文章
- Django 模型中自定义Manager和模型方法
1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...
- WordPress 安装主题、插件时问题解决办法
--当能够在外网访问到自己的博客时,很多人都会很兴奋吧!如果环境是自己配置的,而不是用的集成环境肯定也会有点小小的成就感. --但是在我兴奋的时候遇到了个小麻烦,下载插件提示我输入FTP信任凭据,输了 ...
- linux中syslog自定义存储路径的方法
方法一: 1. su //切换到root用户下2. cp /etc/sysconfig/rsyslog /etc/sysconfig/rsyslogbak //备份vim /etc/sysconfi ...
- wordpress安装主题、插件需要FTP用户名密码
修改主目录wordpress下的wp-config.php文件,在最结尾加上 define("FS_METHOD", "direct"); define(&qu ...
- 转--Android中自定义字体的实现方法
1.Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2.在Android中可以引入其他字体 . 复制代码 代码如下: <?xml versio ...
- Vue中自定义指令的使用方法!
除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍然需要对普通 DOM ...
- 【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
问题描述 在App Service for Windows的环境中,当前只提供了PHP 7.4 版本的选择情况下,如何实现自定义PHP Runtime的版本呢? 如 PHP Version 8.1.9 ...
- WordPress主题设置插件,让你的站点有电脑、手机双主题
我们建站的时候总是会优先考虑自适应的主题,但是与之对应,免费的自适应主题都调用国外公共资源,访问速度不太理想.加上wordpress未经优化之前,本身也没有极高的访问效率.所以大家可以下载这款“主题设 ...
- 6.1 如何在spring中自定义xml标签
dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...
随机推荐
- java线程小结1
1.创建线程的两种方法 新线程的创建和启动都是通过java代码触发的.除了第一个线程(也就是启动程序的.运行main()方法的线程)是由java平台直接创建的之外,其余的线程都是在java代码中通过“ ...
- Python框架之Tornado(请求)
概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所有步骤,如上图[start]是一个死循环,其中利用 ...
- NGUI 3.50 UIButton使用
在NGUI,3.X的版本中,取消了创建UIbutton这个选项,所以我们可以创建uisprite.uilabel等,然后在上面附加uibutton脚本,达到目的,具体步骤 1:在界面上键好2D或3D ...
- JAVA 对象序列化——Serializable(转)
文章出自:http://www.cnblogs.com/chenfei0801/archive/2013/04/05/3001149.html Java的对象序列化是指将那些实现了Serializab ...
- day1 python调用模块,密码加密
import getpass #加密密码 username = input("username:") password = getpass.getpass("passwo ...
- LeetCode: Max Consecutive Ones
这题最关键的是处理最开始连续1和最后连续1的方式,想到list一般在最前面加个node的处理方式,在最前面和最后面加0即可以很好地处理了 public class Solution { public ...
- phpword使用
composer 安装 https://packagist.org/packages/phpoffice/phpword 开发文档:http://phpword.readthedocs.io/en/l ...
- RPC数据通信
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用.远程调用的应用场 ...
- [转]让你从零开始学会写爬虫的5个教程(Python)
让你从零开始学会写爬虫的5个教程(Python) 写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个 ...
- HDU4627
/*找规律,n是奇数那么就是n/2和n/2+1 如果n是偶数,那就是两种情况n/2-1,和n/2-2两种,比较一下大小就可以 思路来自:http://www.cnblogs.com/freezhan/ ...