Logisch, weil du den Rückgabewert der Funktion str_replace immer wieder in $template schreibst, im Funktionsaufruf selbst aber $str als zu bearbeitenden String angibst, das kann ja nicht funktionieren. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.
Irgendwie habe ich das nun auch geschnallt, aber datt bekomme ich nicht.
diplomsiedler