wp_handle_upload() - cómo subir archivos a un subdirectorio personalizado dentro de uploads
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:
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).
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?

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

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.

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."
