Użyj osobnego folderu przesyłania do niestandardowego przesyłania załącznika postu

9

Staram się więc znaleźć sposób na użycie dwóch oddzielnych folderów przesyłania, które są domyślne wp-content/uploadsdla przesyłania plików multimedialnych, a drugi wp-content/customdla jednego określonego typu załączników (pliki PDF dołączone do jednego określonego typu post_).

Ważne jest, aby trzymać je oddzielnie dla organizacji i bezpieczeństwa danych, ponieważ pliki PDF będą zawierać nieco wrażliwe dane, które powinny być dostępne tylko przez dwie niestandardowe role użytkowników, podczas gdy ogólne media są, no cóż, ogólne.

Jestem trochę zawstydzony, aby pokazać ci kod, który uruchomiłem, ponieważ jest kiepski, ale oto:

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

Naprawdę wolałbym mieć tylko 2 pliki do przesłania, jeden dla tego formatu post, a drugi dla reszty. Czy jest na to lepszy sposób?

moraleida
źródło

Odpowiedzi:

4

Skończyło się na tym, że całkowicie ominąłem system przesyłania wp, więc teraz wygląda to tak:

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

Jest o wiele mniej brzydki niż wcześniej, ale i tak byłoby znacznie lepiej, gdyby można to zrobić za pomocą upload_dirfiltra.

moraleida
źródło