Cara mengganti direktori unggah di wp_handle_upload

9

Saya mencoba mencari cara menggunakan fungsi wp_handle_upload untuk plugin khusus sehingga saya dapat menentukan direktori unggahan saya sendiri. Kode sejauh ini mengambil file dari halaman pengaturan plugin saya dan mengunggah ke folder folder upload dengan tahun dan bulan.

Saya menemukan tautan ini yang saya pikir memiliki beberapa petunjuk - http://yoast.com/smarter-upload-handling-wp-plugins

if(strtolower($_SERVER['REQUEST_METHOD']) == "post"){

     $overrides = array('test_form' => false);
     $file = wp_handle_upload($_FILES['binaryFile'], $overrides);

     echo "<pre>" . print_r($file, true) . "</pre>";
}

Bagaimana saya bisa mengunggah ke direktori pilihan saya?

Setiap bantuan sangat dihargai kawan.

Xis
sumber

Jawaban:

5

Berikut adalah contoh lengkap bagaimana kami melakukannya di Easy Digital Downloads:

/**
 * Set Upload Directory
 *
 * Sets the upload dir to edd. This function is called from
 * edd_change_downloads_upload_dir()
 *
 * @since 1.0
 * @return array Upload directory information
*/
function edd_set_upload_dir( $upload ) {
    $upload['subdir'] = '/edd' . $upload['subdir'];
    $upload['path'] = $upload['basedir'] . $upload['subdir'];
    $upload['url']  = $upload['baseurl'] . $upload['subdir'];
    return $upload;
}


/**
 * Change Downloads Upload Directory
 *
 * Hooks the edd_set_upload_dir filter when appropriate. This function works by
 * hooking on the WordPress Media Uploader and moving the uploading files that
 * are used for EDD to an edd directory under wp-content/uploads/ therefore,
 * the new directory is wp-content/uploads/edd/{year}/{month}. This directory
 * provides protection to anything uploaded to it.
 *
 * @since 1.0
 * @global $pagenow
 * @return void
 */
function edd_change_downloads_upload_dir() {
    global $pagenow;

    if ( ! empty( $_REQUEST['post_id'] ) && ( 'async-upload.php' == $pagenow || 'media-upload.php' == $pagenow ) ) {
        if ( 'download' == get_post_type( $_REQUEST['post_id'] ) ) {
            add_filter( 'upload_dir', 'edd_set_upload_dir' );
        }
    }
}
add_action( 'admin_init', 'edd_change_downloads_upload_dir', 999 );
Pippin
sumber
Catatan, kami hanya memodifikasi direktori unggahan saat mengunggah file dari halaman jenis pos khusus Unduhan kami. Anda perlu menyesuaikannya untuk halaman pengaturan plugin Anda.
Pippin
Tidak memiliki "]" dengan$upload['url'
Mario Radomanana
1

Saya tidak ingat melakukan hal ini dalam praktiknya, tetapi sebagian besar penanganan jalur unggah (semua?) wp_upload_dir()Melewati upload_dirfilter yang berlaku untuk informasi yang dikembalikan. Anda harus mencoba memfilternya selama kode Anda berjalan dan menyesuaikan jalur ke lokasi yang diinginkan.

Jarang
sumber
Metode ini mudah diterapkan. Contoh dapat ditemukan di tautan ini, ( codex.wordpress.org/Plugin_API/Filter_Reference/… .
AlanP