Verwenden Sie einen separaten Upload-Ordner für das benutzerdefinierte Hochladen von Post-Anhängen

9

Ich versuche also herauszufinden, wie zwei separate Upload-Ordner verwendet werden können. Dies ist der Standardordner wp-content/uploadsfür allgemeine Medien-Uploads und ein anderer wp-content/customfür einen bestimmten Typ von Anhängen (PDF-Dateien, die an einen bestimmten post_type angehängt sind).

Es ist wichtig, sie sowohl für die Organisation als auch für die Datensicherheit getrennt zu halten, da die PDF-Dateien vertrauliche Daten enthalten, die nur von zwei benutzerdefinierten Benutzerrollen zugänglich sein sollten, während allgemeine Medien allgemein sind.

Es ist mir ein wenig peinlich, Ihnen den Code zu zeigen, mit dem ich gearbeitet habe, weil er mies ist, aber hier ist es:

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

Ich hätte wirklich lieber nur 2 Upload-Dateien, eine für dieses Post-Format und eine für den Rest. Gibt es einen saubereren Weg, dies zu tun?

Moralida
quelle

Antworten:

4

Am Ende habe ich es gelöst, indem ich das wp-Upload-System komplett umgangen habe. So sieht es jetzt aus:

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

Es ist weit weniger hässlich als das, was ich vorher hatte, aber es wäre immer noch viel besser, wenn dies mit dem upload_dirFilter gemacht werden könnte.

Moralida
quelle