You simply need the right employment policiesSomething needs to be done, as at the moment a contract seems worthless. In the case of Snodgrass - he was happy to sign almost 3 years ago for a 4 year term. Fourth year being optional. If a decision comes down to selling a player, it should almost be solely down to the club.
Too much player power at the moment. Something needs to be done so there are consequences for the player. If he doesn't want to play, fine. His wages drop to an affordable level so he can play in the academy junior sides, or not at all.
Refusing to train would be partial performance of your contract
If your policy says you don't accept partial performance then a refusal to train would be dealt with by sending the player home without pay until he came back and asked to train
Relatively simple really (although you'd have to then manage faked injuries, but they happen in other businesses too and are managed)