Blur works by displaying the same texture at slightly different positions, which overlap itself. Their shader does this. Your shader does it too.
But to make a proper blurring effect, you need a lot of different positions - basically one per pixel distance that you want to blur. If you want to blur by 5 pixels, you need positions 0, 1, 2, 3, 4 and 5. Not just 0 and 5, or it will look like two overlapping copies of the texture, not like a blur. They're usually weighted, too, so that position 0 is strongest and position 5 is weakest.
You might be able to get away with skipping some - maybe you do 0,1,3,5 - but you can't skip all the way to the end and expect it to look good.
Your code only displays the texture at positions -5 and 0 and 5 (but in 2D, so it's actually -5,-5 and -5,0 and -5,5 and 0,-5 and 0,0 and 0,5 and 5,-5 and 5,0 and 5,5) but not all the in-between ones. This is why your result looks like 9 overlapping copies of the texture, and not like a blur.
5 pixels is a made-up number here for the sake of explanation. In your actual picture, it looks like about 20 pixels horizontally and 10 pixels vertically.
To get a blur, you need to sample all the in-between points. Which means that you need to use texture2D more than just 9 times. Which your original shader did, and your new shader does not.
Now, the Gaussian blur is a separable blur function. This means there is a very simple trick to making it fast. If you want a Gaussian blur, you simply do a vertical Gaussian blur, save that picture, and then do a horizontal Gaussian blur (or you can do horizontal first, it doesn't matter). This way, if you want a 20-pixel blur, you only have to sample 20 times and then another 20 times, instead of 400 times.