web-dev-qa-db-fra.com

Utilisez un dossier de téléchargement séparé pour le téléchargement personnalisé en pièce jointe

J'essaie donc de trouver un moyen d'utiliser deux dossiers de téléchargement distincts, le wp-content/uploads par défaut pour les téléchargements de médias généraux et un autre pour wp-content/custom pour un type spécifique de pièces jointes (fichiers PDF joints à un type de post_type spécifique).

Il est important de les garder séparés pour la sécurité de l'organisation et des données, car les fichiers PDF contiennent des données assez sensibles qui ne devraient être accessibles que par deux rôles d'utilisateur personnalisés, alors que le support général est, en général, général.

Je suis un peu gêné de vous montrer le code sur lequel je travaille, parce que c'est moche, mais voilà:

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

Je préférerais simplement que deux fichiers de téléchargement soient un pour ce post-format et un autre pour le reste. Y a-t-il une manière plus propre de s'y prendre?

9
moraleida

J'ai fini par le résoudre en contournant complètement le système de téléchargement wp, voici donc à quoi cela ressemble maintenant:

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

C'est bien moins moche que ce que j'avais auparavant, mais ce serait encore mieux si cela pouvait être fait en utilisant le filtre upload_dir.

4
moraleida