Sử dụng một thư mục tải lên riêng biệt để tải lên tệp đính kèm bài đăng tùy chỉnh


9

Vì vậy, tôi đang cố gắng tìm ra cách sử dụng hai thư mục tải lên riêng biệt, là thư mục mặc định wp-content/uploadscho tải lên phương tiện chung và một cách khác nói wp-content/customvề một loại tệp đính kèm cụ thể (tệp PDF được đính kèm với một post_type cụ thể).

Điều quan trọng là phải tách biệt cả về tổ chức và bảo mật dữ liệu vì các tệp PDF sẽ chứa dữ liệu hơi nhạy cảm, chỉ có thể được chấp nhận bởi hai vai trò người dùng tùy chỉnh, trong khi phương tiện truyền thông nói chung là tốt.

Tôi hơi xấu hổ khi cho bạn xem mã tôi đã làm việc, bởi vì nó tệ, nhưng ở đây nó đi:

    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');

Tôi thực sự muốn có 2 tệp tải lên là một cho định dạng bài này và một cho phần còn lại. Có cách nào sạch hơn để đi về nó?

Câu trả lời:


4

Tôi đã kết thúc việc giải quyết nó bằng cách bỏ qua hoàn toàn hệ thống tải lên wp, vì vậy đây là giao diện của nó bây giờ:

/*
 * 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');

Nó ít xấu xí hơn những gì tôi có trước đây, nhưng vẫn tốt hơn nhiều nếu điều này có thể được thực hiện bằng upload_dirbộ lọc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.