Hi!
A general rule is that toddlers won't starve themselves. That isn't to say they won't hold out and put up with some hunger pains to get what they prefer and also learn "poor" eating habits quickly. ie: not eating enough in order to just get on with playing, etc.
So in essence, often you have to be a bit more consistent and establish some basic principles that will hopefully lead him back to eating better. Some ideas are:
1) Let him help with food preparation. He will be more likely to eat what he has played with and assisted with. If he can stir or sprinkle cheese or decorate a pizza or whatever....it will be more interesting to him.
2) Teach him that if he gets up from the table the food goes away. You can throw it out OR save it for the next meal time. If he is claiming he doesn't like it and you KNOW he does. I'd save it and offer it again. No special foods or alternatives that way and he learns that what you offer is what he gets. But don't force him to sit the whole time. It just becomes a power struggle.
3) Always make sure to offer at least one food item that you are CERTAIN he likes at each meal.
4) You can decide if you want to offer ONE alternative food choice if he doesn't like/want the food being offered at that meal, BUT I may refrain from doing this until he is eating a bit more again as he can use this to hold out as he is doing now for those shakes. Also, don't make it something he LOVES, just something he likes enough and eats pretty consistently. Something like a peanut butter and jelly sandwich or crackers and cheese. Something filling enough but not something that is so delicious they will always want that same thing and not the meal offered. I'd probably hold off on incorporating something like this until he realizes that he needs to eat what is offered or just not eat until the next scheduled snack or meal time.
5) Continue to limit snacks, drinks during the day. Distract with games or other activities until the next normal eating time and offer what YOU want to, whether it's what you had offered before or whatever else you had planned on making. Nothing special to try to convince him to eat.
6) Make sure you and other adults in his life are sitting down and eating with him the foods that you would like for him to be eating. Often we take for granted that our kids pick up on subtle things like mommy never sitting to eat or mommy only drinking soda or juice or daddy never eating vegetables. Then they get more ideas about how THEY too can pick and choose, etc. Also, I always allow DD to spit something out if she tries it and doesn't like it. That way she doesn't feel she is being FORCED to eat something she may not like and she feels more in control. Being flexible about new things is a good idea, as well. Although teaching him to spit something out discretely (as in; into his napkin) might not be so easy, so if it grosses you out, then don't allow it LOL
He'll eventually eat when he is hungry and knows that you're not going to just give him what he prefers.