First, let's get rid of all constant solutions. If $f(x)=c$ is a solution, then the equation gives
$c^2=2c\implies c\in \{0,2\}$. So from now on let's assume $f$ is non-constant.
If some $x$ satisfies $f(x)=0$, then plugging that in,
$f(xy)=-f(x^2)$, and since $f$ is non-constant, $x$ must be zero. Also, putting $x=0$ gives $f(0)f(f(0)+y)=2f(0)$, and again $f(0)\ne 0$ leads to $f$ being constant, so in fact $f(x)=0\iff x=0$.
Plugging $y=0$ now gives
$f(x^2)=f(x)f(f(x))$, so the equation can be written $f(x)f(f(x)+y)=f(x)f(f(x))+f(xy)$. Call this alternate version $(\star)$.
Now we claim that
$f$ is injective. Indeed, suppose $f(a)=f(b)$ with $a\ne b$. As seen already, $a,b$ are non-zero. Now substituting $x\mapsto a$ and $x\mapsto b$ in $(\star)$, we see that all the terms except $f(xy)$ have the same value in both cases. Thus $f(ay)=f(by)$ for all reals $y$. This shows that $f$ takes the same value on any two reals with ratio $a/b$.
Now plugging $x=1$ in the original equation gives $f(1)f(f(1)+y)=f(1)+f(y)$. Using this equation for $y\mapsto ay$ and $y\mapsto by$, we see that in fact $f(f(1)+ay)=f(f(1)+by)$, and given any $c\ne a/b$, one can choose $y$ so that the numbers $f(1)+ay$ and $f(1)+by$ have ratio $c$. Thus given any ratio, one can find two reals with that ratio so that $f$ has the same value on them.
And thus, to prove injectivity,
Note that given any non-zero $x_1,x_2$, we can find $c,d$ so that $c/d=x_1/x_2$ and $f(c)=f(d)$. Using the same kind of argument as on $a,b$, this would give $f(cy)=f(dy)$, so in particular $f(x_1)=f(x_2)$, so in fact $f$ is constant on non-zero reals. Because of $f(x^2)=f(x)f(f(x))$, the only possibility (remembering $f$ is non-constant) is $f(x)=1$ for non-zero $x$ and $0$ for $x=0$; this function, however, doesn't work! So $f$ has to be injective.
Phew! Now we are ready for the finish. Indeed, plug in
$y=-f(x)$; we get $f(x^2)=-f(-xf(x))$. Putting $x\mapsto -x$ gives $f(-xf(x))=f(xf(-x))$, and by injectivity this gives $f(-x)=-f(x)$ (well, as long as $x\ne 0$), but this holds for $x=0$ anyway so we are good). This says $f$ is an odd function, so in fact $f(x^2)=f(xf(x))$. Again, injectivity allows us to "cancel out" the outer $f$'s, giving $f(x)=x$ (again, for non-zero $x$, but $f(0)=0$ is already known).
Thus these are all such $f$:
The constant functions $0$ and $2$, and the identity function.