How to upload two input files

时间:2021-09-05 作者:Maria

我正在为一个名为“CPT”的项目提交前端帖子;empresas公司;使用CMB2,我创建了一个名为portfolio的自定义字段,该字段的类型是file\\u list,以便业务部门可以上传他们的工作

在我的自定义表单中,我有一个用于上载公司徽标的输入文件,还有其他多个用于上载其工作的输入文件

我正在使用以下代码将徽标上传为帖子的特色图像,并且没有任何问题

if($_FILES) {
        foreach( $_FILES as $file => $array ) {
            if($_FILES[$file][\'error\'] !== UPLOAD_ERR_OK){
                return "upload error : " . $_FILES[$file][\'error\'];
            }
            $attach_id = media_handle_upload( $file, $post_id );
            var_dump($attach_id);
        }
    }
    if($attach_id > 0) {
        update_post_meta( $post_id,\'_thumbnail_id\', $attach_id );
    }
问题是,当我添加输入的多个文件和代码时,它不会上载任何图像,我尝试了this code 做了一点修改,但不起作用

上载多个文件的代码为

$otherfiles = $_FILES[\'trabajos_empresa\'];
foreach ( $otherfiles[\'name\'] as $key => $value ) {
        if ( $otherfiles[\'name\'][ $key ] ) {
            $file = array(
                \'name\' => $otherfiles[\'name\'][ $key ],
                \'type\' => $otherfiles[\'type\'][ $key ],
                \'tmp_name\' => $otherfiles[\'tmp_name\'][ $key ],
                \'error\' => $otherfiles[\'error\'][ $key ],
                \'size\' => $otherfiles[\'size\'][ $key ],
            );
            $_FILES[\'trabajos_empresa\'] = $file;
            $attachment_id = media_handle_upload( \'trabajos_empresa\', $post_id );
            update_post_meta( $post_id,\'_studiare_portafolio\', $attachment_id );
            var_dump($attachment_id);
            if ( is_wp_error( $attachment_id ) ) {
                // There was an error uploading the image.
                echo \'Error adding file\';
            } else {
                // The image was uploaded successfully!
                //Echo to see if image upload fine
                echo \'File added successfully with ID: \' . $attachment_id . \'<br>\';
                echo wp_get_attachment_image( $attachment_id, array( 800, 600 ) ) . \'<br>\'; // Display the uploaded image with a size you wish. In this case it is 800x600
            }
        }
    }
im使用的html是

 <input type="file" name="post_image" id="post_image" aria-required="true"> 

            <input type="file" name="trabajos_empresa[]" id="trabajos_empresa" aria-required="true" multiple="multiple">

如果我进行var\\u转储,我会将所有文件上载到输入trabajos\\u empresa中,但我的媒体库中不会保存任何文件

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我正在使用以下代码将徽标上传为帖子的特色图像,并且没有任何问题

Yes, the WordPress part in that code and the other code is good.

但是,如果第一个代码位于第二个代码之上/之前,则问题如下if, 这适用于表单中的文件上载输入(post_imagetrabajos_empresa):

if($_FILES[$file][\'error\'] !== UPLOAD_ERR_OK){
    return "upload error : " . $_FILES[$file][\'error\'];
}
因为对于trabajos_empresa 输入,它是一个数组(因为它具有multiple 属性),$_FILES[\'trabajos_empresa\'][\'error\'] 实际上是一个数组(的upload status, 它们是整数),因此$_FILES[\'trabajos_empresa\'][\'error\'] !== UPLOAD_ERR_OK (即。<array> !== <integer>) 是真的,因此return 上述代码中的行跳过通过trabajos_empresa 输入

而您的第二个代码实际上很好,所以请尝试更改第一个代码(整个if($_FILES) { ... } if($attach_id > 0) { ... } 第)部分:

if ( isset( $_FILES[\'post_image\'] ) ) {
    $attach_id = media_handle_upload( \'post_image\', $post_id );

    if ( $attach_id && ! is_wp_error( $attach_id ) ) {
        set_post_thumbnail( $post_id, $attach_id );
    }
}

Notes:

<我用过set_post_thumbnail() 设置帖子缩略图。

我没有检查UPLOAD_ERR_OK 因为它将通过media_handle_upload().

尽管您的第二个代码很好,但您应该检查$_FILES[\'trabajos_empresa\'] 就像我上面对其他输入所做的那样进行设置。例如,if ( isset( $_FILES[\'trabajos_empresa\'] ) ) { put your second code here }. 此外,如果上载失败,您实际上可以检查错误消息,如下所示:echo $attachment_id->get_error_message();.

相关推荐

使用WPForms提交表单时触发操作

我的一位客户使用WPForms插件创建前端表单。提交表单时,条目进入de数据库(在单独的表wp\\u wpform\\u entries或类似的表中,全部由插件处理)。但他们也希望以JSON格式将所有数据发布到另一个网站。是否有办法知道表单已提交,或者使用add_filter(\'wp_insert_post)?