I have purchased rock online, in stores, and gotten it in the wild. I now only get it in the wild. The worst by far is online. You buy something like 20lbs of rock and think "that's a lot of rock!" but when it comes its barely enough to do some basic structure in a nano tank (a small nano tank). Plus you pay shipping for rocks... which is a lot of money compared to what they should cost.
Next best is buying rocks from landscape supply. I have a landscape supply near me that sells a few rocks of interest including large pieces of lava rock. This is the best retail price for rocks of size.
Next best is buying rocks from a well equipped fish store. This works to get rocks that look like everyone elses rocks. Meaning you can buy dragonstone or seiryu stone etc.
The best though is finding them in the wild. Everyone no matter where you are, has rocks somewhere around them. Different states will have different laws on collection. Some won't allow it on public lands without a permit. Getting that permit might be easy or hard. Therefore its best to get them from private land where most people are perfectly pleased (actually typically quite amused) if you ask to go down to their stream or yard and pick up a bunch of big rocks. The challenge here is getting rocks that look like the same type of rock so they look like they belong in the scape. You also get to pick up a variety of sizes so you don't need to say crush a rock with a hammer to get detail stones.
For wood there are a few options online. One that gets good reviews is the Mananita Dude on facebook. He has a website now:
Aquarium wood | Manzanitastore.com