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); 
        } 
    } 
}

  

 
原文地址:https://www.cnblogs.com/jerryqi/p/9717825.html