get_permalink() принимает в качестве аргумента объект $post или post_id(т.е. можно передать id любого поста или любой объект $post в принципе), и по умолчанию этот аргумент ссылается именно на глобальный $post, поэтому это и работает вне цикла и без аргумента.