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); } } }
原创文章,转载请注明来源