There’s a bit of a problem with previewing posts in WordPress. When a post has metadata associated, let’s say you’re using the excellent Advanced Custom Fields plugin, and you hit the preview button – you can see content changes but none of the custom fields appear to be set in the preview. Odd.
But then you take a look at the live post. The custom fields have been updated there instead of on the preview!
This is because of the way previews work, internally WordPress creates a revision and displays that. The problem is the that the form to save the post is still submitted, the standard ‘save_post’ hook is fired and all those well intentioned plugins and themes dutifully update the post meta.
There has been some work under way on this trac ticket #20299 however there’s not been a consensus on how to do this in a generic way. The long term solution is a full blown post meta revision system like the one Alex King is already using (trac ticket #20564). For some reason only post format metadata gets revisioned. Seems strange to me that a generic solution could not be implemented.
Anyway, enough moaning. Here’s a code snippet you can use in your plugins or themes to get around the problem with previews for the time being: