zoukankan      html  css  js  c++  java
  • 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); 
            } 
        } 
    }
    

      

     
  • 相关阅读:
    集合框架(三)
    集合框架(二)
    集合框架(一)
    第九章 持有你的对象
    UML类图
    用a标签设置锚点
    设计原则
    第八章 接口与内部类
    装配Bean
    第33条:用EnumMap代替序数索引
  • 原文地址:https://www.cnblogs.com/jerryqi/p/9717825.html
Copyright © 2011-2022 走看看