If you have the need to sell services or products via Virtuemart that don't require shipping then you are out of luck with Virtuemart out of the box. However with a few simple tweaks to the VM codebasee this can be accomodated.
Virtuemart has a very helpful mechanism for creating downloadable products which we can adapt to skip the shipping step of the checkout.
Code Changes
If you edit the file administrator/components/com_virtuemart/classes/ps_product.php and find the method "is_downloadable" (line 945 in Virtuemart 1.15) and replace it with the following code
function is_downloadable($product_id) { // GWE mod start if( empty( $GLOBALS['product_info'][$product_id]['skipshipping'] )) { $db_check = new ps_DB; $q_ns = 'SELECT p.product_id from #__{vm}_product as p LEFT JOIN #__{vm}_product_category_xref as xr on p.product_id=xr.product_id LEFT JOIN #__{vm}_category as ct on xr.category_id=ct.category_id where p.product_id='.intval($product_id).' AND LOWER(ct.category_name) = "no shipping"'; $db_check->query($q_ns); $db_check->next_record(); if( $db_check->num_rows() > 0 ) { $GLOBALS['product_info'][$product_id]['skipshipping'] = 'Y'; } else { $GLOBALS['product_info'][$product_id]['skipshipping'] = 'N'; } } // GWE mod end if( empty( $GLOBALS['product_info'][$product_id]['is_downloadable'] )) { $db_check = new ps_DB; $q_dl = "SELECT attribute_name,attribute_value FROM #__{vm}_product_attribute WHERE product_id=".(int)$product_id." AND attribute_name='download'"; $db_check->query($q_dl); $db_check->next_record(); if( $db_check->num_rows() > 0 ) { $GLOBALS['product_info'][$product_id]['is_downloadable'] = 'Y'; } else { $GLOBALS['product_info'][$product_id]['is_downloadable'] = 'N'; } } // GWE mod start //return $GLOBALS['product_info'][$product_id]['is_downloadable'] == 'Y'; return ($GLOBALS['product_info'][$product_id]['is_downloadable'] == 'Y' || $GLOBALS['product_info'][$product_id]['skipshipping'] == 'Y'); // gwe mod end }
Creating Non-Shipping Products
If you look at the code above you may notice that there is a test on a product's category name. Basically any product we create if we add it into a category called "No Shipping" then in combination with the code change above Virtuemart will skip the shipping stage of the checkout process.