There's two ways you can go about this - hardware and software.
To do it in software would mean writing a new bootloader that supported whatever wireless medium you chose. The bootloader might end up quite large and thus restrict the size of sketch you are able to support. It may also require advanced programming techniques in order to fit it into memory. Not a task for a beginner.
Doing it in hardware is easier but more restrictive. You need a wireless medium that can emulate a serial device including the ability to perform a reset of the Arduino. There are bluetooth interfaces for the Arduino that can perform this kind of functionality, but I am not aware of anything WiFi or Ethernet that even remotely comes close.
There are Arduino boards available with this kind of bluetooth interface built in.
A possible third option is something in between - you have two Arduinos (or some other external MCU based system, like an ATTiny for instance), the "target" and the "programmer". The "programmer" is what is connected to the wireless and accepts instructions and commands over the air. It is then capable of putting the "target" into bootloader mode (reset it) and pass data through to its serial port for programming. It does mean the "target" isn't directly connected to the wireless though, so it is up to the "programmer" to support whatever wireless functionality is needed and communicate properly with the "target" to get it to do everything it should. There is no way to do FOTA to the "programmer" though, so you're back at square one if you want to reprogram that...