You could try to set up the free shipping rules with table rates where you can define different names.
But "Software Virtual License" looks like a special case. Software licenses should be virtual products and if you have only virtual products in the cart, the shipping step is skipped completely.
Answer to updated question:
Since I cannot change these products to a virtual product, is it possible to create an observer on the cart and checkout page that would treat these products with a specific attribute as a virtual product?
How would I create a basic observer to by-pass the shipping?
The method that's used to determine if a quote is virtual, i.e. the shipping step is skipped, is Mage_Sales_Model_Quote::isVirtual()
.
You see that the only way to influence the result without rewriting this method would be to make the products getIsVirtual()
method return true:
$_item->getProduct()->getIsVirtual())
Unfortunately this method uses the product type singleton instance:
return $this->getTypeInstance(true)->isVirtual($this);
And for simple products, the isVirtual()
method simply returns false:
public function isVirtual($product = null)
{
return false;
}
So, there is no way to modify the behavior with an observer, but you have the choice which model to rewrite:
sales/quote
catalog/product
catalog/product_type_simple
This is something like a choice between pest, cholera and hemorrhoids. Between those, I'd always choose the latter but it's still not nice.