Exactly, for example the path: WAN -> veth0 -> bridge{veth1,eth0,wlan0}
passes through the veth0 queue which can be set to the same rate as the WAN download, for shaping purposes.... but
wlan0 -> eth0 or eth0->wlan0 would go at full speed.
Any packet going say eth0 -> WAN or wlan0 -> WAN would go through the WAN exit queue, thereby shaping the upload
On the other hand, if you have a wired router, say eth1 on WAN and eth0 as LAN, with an AP connected as a cable... then
eth1 -> eth0
goes through the eth0 output queue and eth0 > WAN goes through the eth1 output queue, since these are the only ways traffic can travel, it fully shapes the WAN to use these two.
What gets tricky is if you have say a LAN and a GUEST network... now anything inbound on WAN could go out either LAN or GUEST... which makes your life hard.
The only way to solve that is to use a veth and a separate namespace... You can put the true WAN bridged to the veth0 in the other namespace, and keep the veth1 as your "apparent WAN" in the main namespace...
bridge{eth1,veth0} in namespace "prewan"
veth1 is your WAN in regular namespace....
you put shapers on veth0 and veth1 before you push veth0 into the other namespace and form the bridge...
but I don't think OpenWrt supports namespaces by default? at least it didn't a year ago or so.