La función preg_replace() no funcionará como esperas, pues invocas la función pathFromId() para construir la cadena de reemplazo, sin embargo necesitas que se invoque al hacer el reemplazo, que es diferente.
Lo que necesitas es preg_replace_callback(), consulta el manual.