Na verdade, há uma ótima função que fará todas essas três coisas para você:
media_sideload_image( $url, $post_id, $description );
O primeiro argumento é o URL remoto da imagem que você deseja baixar. O segundo argumento é o post id do post ao qual você deseja anexar a imagem. O terceiro argumento é opcional, mas será uma descrição, se incluído.
Eu sugeriria encontrar uma maneira de limitar os downloads para que você não consumaria o tempo limite, como limitar o número de imagens que ele puxa por carregamento e configurar o importador para atualizar-se entre os downloads ou usar o AJAX para faça-os um de cada vez de forma assíncrona.