Gunakan folder unggah terpisah untuk unggahan lampiran pos khusus

9

Jadi, saya mencoba mencari cara untuk menggunakan dua folder unggahan yang terpisah, menjadi yang default wp-content/uploadsuntuk unggahan media umum, dan yang lain mengatakan wp-content/customuntuk satu jenis lampiran tertentu (file PDF dilampirkan ke satu post_type tertentu).

Adalah penting untuk memisahkan mereka baik untuk organisasi dan keamanan data karena file PDF akan menyimpan data yang agak sensitif yang hanya dapat diakses oleh dua peran pengguna khusus, sementara media umum, yah, umum.

Saya sedikit malu untuk menunjukkan kode yang saya dapatkan kepada saya, karena itu buruk, tapi begini saja:

    function custom_post_type_metabox_save_function($post_id) {

    global $post;

    // Verify auto-save, nonces, permissions and so on then:

    update_post_meta($post_id, "meta_key1", $_POST["value1"]);
    update_post_meta($post_id, "meta_key2", $_POST["value2"]);

// this is where it gets uply. I change the 'upload_path' to my desired one for this post type
    update_option('upload_path','wp-content/custom-upload-dir');

// then upload the file to it
wp_upload_bits($_FILES["pdfexame"]["name"], null, file_get_contents($_FILES["pdfexame"]["tmp_name"]));

// and then change it back to default... :$
    update_option('upload_path','');

}
add_action('save_post','custom_post_type_metabox_save_function');

Saya lebih suka hanya memiliki 2 file unggahan menjadi satu untuk format pos ini dan satu lagi untuk sisanya. Apakah ada cara yang lebih bersih untuk melakukannya?

moraleida
sumber

Jawaban:

4

Saya akhirnya menyelesaikannya dengan benar-benar melewati sistem unggahan wp, jadi seperti ini tampilannya sekarang:

/*
 * Define new upload paths
 */

$uploadfolder =  WP_CONTENT_DIR . '/exames'; // Determine the server path to upload files
$uploadurl = content_url() . '/exames/'; // Determine the absolute url to upload files
define(RM_UPLOADDIR, $uploadfolder);
define(RM_UPLOADURL, $uploadurl);

    function custom_post_type_metabox_save_function($post_id) {

        global $post;

        // Verify auto-save, nonces, permissions and so on then:

        update_post_meta($post_id, "meta_key1", $_POST["value1"]);
        update_post_meta($post_id, "meta_key2", $_POST["value2"]);
        update_post_meta($post_id, "meta_key3", $_POST["value3"]);

    $destination =  RM_UPLOADDIR; // Determine the path to upload files
    $filename = $_FILES["file"]["name"]; // Get the uploaded file name

    // This separates the extension from the rest of the file name
    $filename = strtolower($filename) ; 
    $exts = split("[/\\.]", $filename) ; 
    $n = count($exts)-1; 
    $exts = $exts[$n];

    $newname = time() . rand(); // Create a new name
    $filepath = $destination . '/' . $newname.'.'.$exts; // Get the complete file path
    $filename = $newname.'.'.$exts; // Get the new name with the extension

    // Now, if the upload was successful we save a post meta with the filename, if not, save nothing
    if (move_uploaded_file($_FILES["pdfexame"]["tmp_name"], $filepath)) {
            update_post_meta($post_id, "rm_martins_exame_url", $filename); 
        }

  }
    add_action('save_post','custom_post_type_metabox_save_function');

Ini jauh lebih jelek daripada apa yang saya miliki sebelumnya, tetapi masih akan jauh lebih baik jika ini bisa dilakukan dengan menggunakan upload_dirfilter.

moraleida
sumber