How to disable shipping for ONLY virtual products and not if combined with physical In Drupal Commerce, I'm trying to come up with a rule the bypasses shipping if
virtual product types are put into the cart, but ONLY if all products are virtual; if physical products are put in, then the rule wouldn't fire because these products need to be shipped.

Below, for reference, is a solution for virtual products; it's close but it won't suffice if combined with both physical and virtual products.

Install Commerce Rules Extra


Create a rule for Event: Process checkout pane
Add Action: Change pane properties
Value: Shipping information
Page to move to: &lt;do not change&gt;
Enabled: uncheck
Add Condition: e.g. by Order contains products of particular product types, or based on Commerce order contains shippable products supplied by Commerce Physical Product.
You may have to clear caches before this takes effect.
Commerce Shipping has a couple of ways you can approach this. The simplest is to set the weight of your virtual products to zero, they won't be assessed shipping charges, and they won't affect any weight based calculations. 

EDIT: Alternatively, you can use Commerce Rules Extra to add conditions that exclude your virtual products in the conditions for your Flat Rate.