WordPress上传前端表单不上传图片 [英] Wordpress upload frontend form not uploading images

查看:25
本文介绍了WordPress上传前端表单不上传图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 wordpress 中的前端表单来创建自定义帖子类型并上传附加到该帖子的图片.

I'm working on a frontend form in wordpress to create a custom post type and upload a picture attached to that post.

以下是我目前的代码.帖子已创建,但问题是图像未上传到附加到该帖子的服务器.另一方面,我希望在发送表单之前对图像进行预可视化,就像 wordpress 用于管理区域一样.

Below is my code so far. The post is created, but problem is that the images are not uploaded to the server either attached to that post. On the other hand I would like the images to be pre-visualized before sending the form, in the same way wordpress works for the admin area.

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['new_cpt_action'] ) &&  $_POST['new_cpt_action'] == "new_cpt" && isset( $_POST['new_cpt-form'] ) && wp_verify_nonce( $_POST['new_cpt-form'], 'create_new_cpt' ) ){

if (isset($_POST['submit'])) {
    $error = "";
    if (!empty($_POST['s_name'])) {
        $s_name =  $_POST['s_name'];
    } else {
        $error = 'Please insert a name';
    }
    if (empty($error)) {
        $new_post = array(
        'post_title'    =>  $s_name,
        'post_status'   =>  'pending', 
        'post_type' =>  'my_cpt',  
        );

        //Save the post
        $post_id = wp_insert_post($new_post);

        if( ! empty( $_FILES ) ) {
            foreach( $_FILES as $file ) {
                if( is_array( $file ) ) {
                    $attachment_id = wp_insert_attachment($file, $post_id);
                }
            }
        }

        //Redirect to the new post
        if ( $post_id ) {
                wp_redirect(home_url('site/'.$post_id));
            exit;
        }
    }
}

}

还有形式:

<form id="new_post" name="new_post" method="post" action="" class="" enctype="multipart/form-data">
    <input type="text" id="s_name" name="s_name"/>
    <input type="file" name="s_image" id="s_image" tabindex="25" />
    <input type="submit" value="Create post and upload image" id="submit" name="submit"/>
    <input type="hidden" id="new_cpt_action" name="new_cpt_action" value="new_cpt" />
</form>

如果你能告诉我我缺少什么,那就太好了.谢谢

If you could please let me know what I'm missing would be great. Thanks

推荐答案

我设法用这段代码将附件包含在 wp 媒体库中:

I managed to include the attachments in the wp media library with this code:

if ( $_FILES ) { 
                $files = $_FILES["file"];  
                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 ("file" => $file); 
                            foreach ($_FILES as $file => $array) {              
                                $newupload = frontend_handle_attachment( $file, $post_id ); 
                            }
                        } 
                    } 
                }

调用函数frontend_handle_attachment:

Which calls the function frontend_handle_attachment:

function frontend_handle_attachment($file_handler,$post_id) {
// 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 );

// Set featured image 
set_post_thumbnail($post_id, $attach_id);
return $attach_id;
}

使用如下形式的简单输入即可正常工作:

This works fine with a simple input in the form as follows:

<input type="file" name="file[]" multiple="multiple" />

至于图像的进度条和预可视化,我正在尝试实现 dropzone,但到目前为止还没有运气.至少简单的方法有效.

As for the progress bar and pre-visualization of the images, I'm trying to implement dropzone, but no luck so far. At least the simple approach works.

这篇关于WordPress上传前端表单不上传图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆