Use una carpeta de carga separada para cargar archivos adjuntos de publicaciones personalizadas

9

Por lo tanto, estoy tratando de encontrar una manera de usar dos carpetas de carga separadas, siendo la predeterminada wp-content/uploadspara las cargas de medios generales, y otra wp-content/custompara un tipo específico de archivos adjuntos (archivos PDF adjuntos a un post_type específico).

Es importante mantenerlos separados tanto para la organización como para la seguridad de los datos, ya que los archivos PDF contendrán datos confidenciales que solo deberían ser accesibles para dos roles de usuario personalizados, mientras que los medios generales son, bueno, generales.

Me da un poco de vergüenza mostrarle el código con el que trabajé, porque es pésimo, pero aquí va:

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

Realmente preferiría tener 2 archivos de carga, uno para este formato posterior y otro para el resto. ¿Hay una forma más limpia de hacerlo?

moraleida
fuente

Respuestas:

4

Terminé resolviéndolo omitiendo por completo el sistema de carga de wp, así que ahora es así:

/*
 * 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 mucho menos feo que lo que tenía antes, pero aún sería mucho mejor si esto se pudiera hacer usando el upload_dirfiltro.

moraleida
fuente