Great question. Ideally you would create a bridge to the civicrm API and not hit the database directly. I've floated it with two vendors: https://wp-types.com/ and http://pods.io/
You makemay find this useful: http://pods.io/docs/comparisons/compare-content-types/