1.
wp_tempnam() - создать временный файл $tmp для его последующей перезаписи из п3.
2. Объявить ассоциативный массив с данными изображения, где среди прочего передать
'name' => basename($tmp),
3. Перезаписать временный файл из п1 данными из п2 -
media_handle_sideload(), вернется id уже загруженного изображения в wp.
4. Удалить временный файл п1 -
unlink().
5. Зная id уже загруженного изображения на сервер (п3), можно получить его превью (например).
Выглядеть это будет примерно так (грубый пример):
$tmp = wp_tempnam('img');
imagejpeg($img_o, $tmp, 100);
imagedestroy($img_o);
$file_data = [
'name' => basename($tmp),
'tmp_name' => $tmp,
];
$id = media_handle_sideload($file_data);
unlink($tmp);
echo wp_get_attachment_image_url($id, 'thumbnail');