wp_handle_upload() - cómo subir archivos a un subdirectorio personalizado dentro de uploads

12 abr 2014, 13:09:56
Vistas: 15K
Votos: 5

wp_handle_upload() funciona para mí, pero sube los archivos donde quiere (uploads/año/mes).

Pregunta: ¿Hay alguna forma de indicarle que suba los archivos a un directorio personalizado (uploads/midirectoriopersonal)? ¿O existe alguna otra función que pueda hacer esto?

Lo que he intentado:

  1. move_uploaded_file() de PHP (no pude determinar el parámetro del directorio destino - esto es para un plugin y necesito que funcione para todos independientemente de su estructura de directorios).

  2. https://yoast.com/smarter-upload-handling-wp-plugins

Pegué este código en el archivo principal de mi plugin. No pasó nada. Pero veo en los comentarios que parece funcionar para otros.

POR FAVOR, si tienes una respuesta, dala completa. Puedo obtener $_FILES['miarchivo']. ¿Qué pasos debo seguir desde ahí para que ese archivo vaya a uploads/micarpetapersonal?

0
Todas las respuestas a la pregunta 1
2

Puedes trabajar en la idea que proporcionó Joost y usar el filtro upload_dir para establecer temporalmente la ruta de subida a otro lugar.

/**
 * Sobrescribe la ruta de subida predeterminada.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/midirectoriopersonalizado',
        'url'    => $dir['baseurl'] . '/midirectoriopersonalizado',
        'subdir' => '/midirectoriopersonalizado',
    ) + $dir;
}

Y luego, en la práctica, es tan fácil como:

// Registramos nuestra sobrescritura de ruta.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Hacemos lo nuestro. WordPress moverá el archivo a 'uploads/midirectoriopersonalizado'.
$result = wp_handle_upload( $_FILE['miarchivo'] );

// Volvemos a establecer todo a la normalidad.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
12 abr 2014 13:49:24
Comentarios

Muchas gracias por la guía. Esto casi funciona, pero ahora obtengo: "No se puede crear el directorio wp-content/uploads/mycustomdir. ¿El directorio padre tiene permisos de escritura para el servidor?". Para mí, parece obvio que el directorio padre tiene permisos de escritura, ya que las subidas allí funcionan perfectamente.

CodeVirtuoso CodeVirtuoso
12 abr 2014 14:02:17

Intentando resolver el problema anterior, probé creando mycustomdir durante la activación del plugin, usando este fragmento de código: http://www.wpmayor.com/code-snippet-to-create-a-directory-within-uploads-folder/ Resultado: en mi localhost funciona (y también tu código) - pero en el servidor de producción dice: "El plugin generó 233 caracteres de salida inesperada durante la activación. Si notas mensajes de 'headers already sent', problemas con feeds de sindicación u otros problemas, intenta desactivar o eliminar este plugin."

CodeVirtuoso CodeVirtuoso
12 abr 2014 14:51:05