Most tub-shower soap dishes catch water and reduce bars of soap to handfuls of mush. This isn't caused by the soap dish itself but rather usually by the position of the dish—low on the wall near the tub, for example where it takes a direct hit from water leaving the showerhead.
Instead, install a new soap dish high—and dry—on the wall, just below and a little to the side of the showerhead. For a fiberglass or acrylic surround, accessory soap dishes can be glued directly to the wall. For tiled walls, you'll need a porcelain soap dish, and for the install you'll need to remove some tile.
Choose the right location
Choose a spot on the wall for the new dish that's four or five tiles below the showerhead—about 16 to 20 inches—and two or three tiles to the right or left. Next, wearing appropriate eye protection, scratch out the grout from around the tile with a grout saw or awl. Then, use a hammer and nail set to punch a series of divots across the face of the tile in an X-shape pattern. Using those small craters as starting points, bore through the tile but not the wall behind it with a 1/4-inch-diameter masonry drill bit.
Remove tile(s) for soap dish installation
While still wearing eye protection, carefully crack the tile into pieces using a ¼-inch-wide cold chisel and hammer. Pry out the fractured shards of tile and scrape the wall surface clean of any old mortar or leftover adhesive.
Apply tile adhesive
Spread a thin coat of tile adhesive onto the wall with a putty knife. Smear some of the adhesive onto the back of the soap dish, too.
Check for level and fill with grout to finish installation
Firmly press the dish into place and secure it with two or three strips of masking tape. Check to be certain the dish is level. Wait 24 hours, then fill all the joints around the soap dish with grout. Allow the grout to dry overnight before using the shower.