$ _FILES在WordPress上传元上传框中始终为空

时间:2017-09-25 15:59:15

标签: php wordpress plugins

我感觉很傻。我正在构建我的第一个WordPress插件。第一个目标是在帖子中添加自定义元框,以允许音频上传。我创建了元框,当我使用文本输入时,代码工作正常。当我尝试将输入转换为文件上传时,我遇到了问题。

  1. 文件永远不会上传(我正在使用wp_upload_bits()
  2. $ _ FILES似乎总是空的。在下面的示例中,当我调用$_FILES[ 'audio_box' ]之类的内容时,我总是会收到无效或不可用的密钥。
  3. 这是我正在使用的代码的简化版本。我有实际版本中的nonce和所有设置!

    <?php
    
    add_action( 'load-post.php', 'file_upload_setup' );
    add_action( 'load-post-new.php', 'file_upload_setup' );
    
    function file_upload_setup() {
        add_action( 'add_meta_boxes', 'file_upload_box' );
        add_action( 'save_post', 'upload_save_post_class_meta' );
    }
    
    function file_upload_box() {
        add_meta_box(
            'audio_box',    // Unique ID
            esc_html__( 'Title' ),
            'audio_box',   // Callback function
            'post',         // Admin page (or post type)
            'side',         // Context
            'default'         // Priority
        );
    }
    
    function upload_save_post_class_meta( $post_id ) {
        if ( !empty( $_FILES[ 'audio_box' ] ) ) {
            $upload = wp_upload_bits( $_FILES[ 'audio_box' ][ 'name' ],
                null,
                file_get_contents( $_FILES[ 'audio_box' ][ 'tmp_name' ] )
            ); 
        }
    }
    
    function file_upload_box( $post ) { ?>
        <p>
            <label for="file_upload_box"><?php _e( "Upload an audio file to accompany your post." ); ?></label>
            <br />
            <input
                class="widefat"
                type="file"
                name="audio_box" 
                id="audio_box" 
                value="<?php 
                        echo esc_attr(
                            get_post_meta( $post->ID, 'audio_box', true ) 
                        );
                    ?>" 
                size="30" 
            />
        </p>
    <?php }
    
    ?>
    

    我需要做些什么特别的事情才能让文件在保存时上传到媒体库?

    谢谢大家!长时间听众,第一次来电:)

1 个答案:

答案 0 :(得分:2)

您缺少一些代码行,以便填充$_FILES

add_action( 'post_edit_form_tag', 'update_edit_form' );
function update_edit_form() {
    echo ' enctype="multipart/form-data"';
}

在当地为我工作。

  

https://tommcfarlin.com/upload-files-in-wordpress/(在评论中写下)

     

https://code.tutsplus.com/articles/attaching-files-to-your-posts-using-wordpress-custom-meta-boxes-part-1--wp-22291

相关问题