Cómo cambiar el directorio de carga en wp_handle_upload

9

Estoy tratando de averiguar cómo usar la función wp_handle_upload para un complemento personalizado para poder especificar mi propio directorio de carga. Hasta ahora, el código toma un archivo de la página de configuración de mi complemento y lo carga en la carpeta con el año y el mes.

Encontré este enlace que pensé que podría tener algunas pistas: http://yoast.com/smarter-upload-handling-wp-plugins

if(strtolower($_SERVER['REQUEST_METHOD']) == "post"){

     $overrides = array('test_form' => false);
     $file = wp_handle_upload($_FILES['binaryFile'], $overrides);

     echo "<pre>" . print_r($file, true) . "</pre>";
}

¿Cómo puedo subir a un directorio de mi elección?

Cualquier ayuda muy apreciada chicos.

Xis
fuente

Respuestas:

5

Aquí hay un ejemplo completo de cómo lo hacemos en Easy Digital Downloads:

/**
 * Set Upload Directory
 *
 * Sets the upload dir to edd. This function is called from
 * edd_change_downloads_upload_dir()
 *
 * @since 1.0
 * @return array Upload directory information
*/
function edd_set_upload_dir( $upload ) {
    $upload['subdir'] = '/edd' . $upload['subdir'];
    $upload['path'] = $upload['basedir'] . $upload['subdir'];
    $upload['url']  = $upload['baseurl'] . $upload['subdir'];
    return $upload;
}


/**
 * Change Downloads Upload Directory
 *
 * Hooks the edd_set_upload_dir filter when appropriate. This function works by
 * hooking on the WordPress Media Uploader and moving the uploading files that
 * are used for EDD to an edd directory under wp-content/uploads/ therefore,
 * the new directory is wp-content/uploads/edd/{year}/{month}. This directory
 * provides protection to anything uploaded to it.
 *
 * @since 1.0
 * @global $pagenow
 * @return void
 */
function edd_change_downloads_upload_dir() {
    global $pagenow;

    if ( ! empty( $_REQUEST['post_id'] ) && ( 'async-upload.php' == $pagenow || 'media-upload.php' == $pagenow ) ) {
        if ( 'download' == get_post_type( $_REQUEST['post_id'] ) ) {
            add_filter( 'upload_dir', 'edd_set_upload_dir' );
        }
    }
}
add_action( 'admin_init', 'edd_change_downloads_upload_dir', 999 );
Reineta
fuente
Tenga en cuenta que solo modificamos el directorio de carga cuando cargamos archivos desde nuestra página de tipo de publicación personalizada Descargas. Deberá ajustarlo para la página de configuración de su complemento.
Pippin
Carece de "]" con$upload['url'
Mario Radomanana
1

No recuerdo haber hecho exactamente esto en la práctica, pero la mayoría (¿todo?) Maneja la ruta de carga wp_upload_dir()que aplica el upload_dirfiltro a la información devuelta. Debe intentar filtrarlo durante la ejecución de su código y ajustar las rutas a la ubicación deseada.

Rarst
fuente
Este método es fácil de implementar. Se puede encontrar un ejemplo en este enlace ( codex.wordpress.org/Plugin_API/Filter_Reference/… .
AlanP