Jump to content
Sign in to follow this  
CodeCutter

Free shipping for certain products only

Recommended Posts

Is it possible to offer free shipping for certain products only? Can I do this by category, by subcategory, by product?

 

I tried different setting in Admin section, but could not figure it out.

Thanks,

CodeCutter


-- Reality is an illusion caused due to lack of alcohol.

-- We are never too old to learn something new.

Share this post


Link to post
Share on other sites

If you are using weights just use a Zero weight and it will give free shipping (I think), however if you are not using weights, you got me on that one.

 

I am in the same boat, out of the blue I was told a few days ago, oh for certain items we do not charge shipping >_< ..DOH.

 

Anyone know how to offer free shipping on certain items when no weights are being used???

 

tia

 

-ctw


"Silence!", thundered Sir Topham Hatt.

Share this post


Link to post
Share on other sites

I'm currently looking for a slightly more complex version of this. A customer of mine want to offer flat shipping rates for his items based on price. However when the price reaches $100.00 they get free shipping.

 

This was easy and I set it up. The problem is he has a couple of items that are over $100.00 but he does need to charge for shipping because they are oversize. If anyone has any ideas on how to do this I would reall appreciate it.

 

I've searched the forums but didn't see anything quite like this.

 

Thanks

Share this post


Link to post
Share on other sites

I've got the same issue. I need to offer free s&h on individual items, I tried entering a weight of "0" and it's give me a UPS error on checkout:

 

"An error occured with the UPS shipping calculations.

The requested service is invalid from the selected origin.

If you prefer to use UPS as your shipping method, please contact the store owner."

 

Ideas anyone ?

Share this post


Link to post
Share on other sites
I'm currently looking for a slightly more complex version of this.  A customer of mine want to offer flat shipping rates for his items based on price.  However when the price reaches $100.00 they get free shipping.

 

This was easy and I set it up.

 

Can you tell me how you did this? Thanks.


-- Reality is an illusion caused due to lack of alcohol.

-- We are never too old to learn something new.

Share this post


Link to post
Share on other sites

I think I figured it how to offer free shipping.

Go to Admin => Order Total module =>

Select amount for "Free Shipping For Orders Over" field.

 

Now I have a question. Can I set up free shipping based on order value as above and also offer free shipping based on weight as set up in "Shipping" module? Has anyone tried it? Was it successful?

 

Thanks.


-- Reality is an illusion caused due to lack of alcohol.

-- We are never too old to learn something new.

Share this post


Link to post
Share on other sites
I've got the same issue. I need to offer free s&h on individual items, I tried entering a weight of "0" and it's give me a UPS error on checkout:

 

"An error occured with the UPS shipping calculations.

The requested service is invalid from the selected origin.

If you prefer to use UPS as your shipping method, please contact the store owner."

 

Ideas anyone ?

 

Well I took a shot at hacking the ups.php module. I modified the else branch where it returns the above error message.

 

Here's the whole chunk of code, where it checks the if a quote was returned....

 

if ( (is_array($upsQuote)) && (sizeof($upsQuote) > 0) ) {

$this->quotes = array('id' => $this->code,

'module' => $this->title . ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . 'lbs)');

 

$methods = array();

$qsize = sizeof($upsQuote);

for ($i=0; $i<$qsize; $i++) {

list($type, $cost) = each($upsQuote[$i]);

$methods[] = array('id' => $type,

'title' => $this->types[$type],

'cost' => ($cost + MODULE_SHIPPING_UPS_HANDLING) * $shipping_num_boxes);

}

 

$this->quotes['methods'] = $methods;

 

if ($this->tax_class > 0) {

$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

}

} else {

//-- allow for 0 weight FREE shipping Ray Dixon 12-09-04

 

$this->quotes = array('id' => $this->code, 'module' => $this->title . ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . 'lbs)', 'cost'=>"0");

 

$methods[] = array('id' => 0, 'title' => "UPS Ground - <b>FREE</b><br><b>Note:</b> If you require faster shipping please contact us for additional shipping options.", 'cost' => "0");

 

$this->quotes['methods'] = $methods;

 

if ($this->tax_class > 0) {

$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

}

 

//-- allow for 0 weight FREE shipping Ray Dixon 12-09-04 END

}

 

 

It works for me, as all I want is for the customer to see free UPS Ground if the item is 0 lbs and the only item in the cart. If there are other items in the cart that have a weight greater than 0lbs, then of course a quote is returned and all the shipping options and rates are displayed. The only possible problem would be if the UPS system is down and then there's the potential for items that should have a real quote, to get the free UPS Ground line. Probably a low rate of that happening, so I figure I will handle that with the customer on a case by case basis.

Share this post


Link to post
Share on other sites

I came accross this somewhere on this forum it works GREAT for weight items.

 

____________________________________________________________________

 

 

 

I had a need to be able to send small sample packages to potential customers and charge them a fixed charge which included shipping. (for example I would offer them a sample for $3, have them process it online, bypass the shipping charges, and send it to them through regular mail)

 

I accomplished this by setting the weight of the product to "0". Then made minor changes to two files as follows:

 

In catalog/includes/languages/english/modules/order_total/ot_shipping

Changed this:

define('FREE_SHIPPING_DESCRIPTION', 'Free shipping for orders over %s');

To:

define('FREE_SHIPPING_DESCRIPTION', 'No shipping charge for this order');

 

In catalog/checkout_shipping.php

Just before the following line (around line 99):

// process the selected shipping method

if (isset($_POST['action']) && ($_POST['action'] == 'process')) {

 

Add the following if statement (remember, just prior to it):

if ($total_weight == 0) {

$free_shipping = true;

include(DIR_WS_LANGUAGES . $osC_Session->value('language') . '/modules/order_total/ot_shipping.php');

}

 

You will need to set the tare weight to zero or set the number in the IF statement to equal your tare weight.

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

Thank you for posting this! I came looking for that exact thing - works great except I had to make one edit.

 

This line that you posted:

include(DIR_WS_LANGUAGES . $osC_Session->value('language') . '/modules/order_total/ot_shipping.php');

 

Needed to be changed to this:

include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');

 

Thanks again!

Amanda

 

 

____________________________________________________________________

 

I used it and it is a VERY easy mod to do and it works great.


Life Is Too Short,

Enjoy Your Coffee!

Pete

Share this post


Link to post
Share on other sites

I'm using the table rate based on price. If I set an item to 0 lbs. quantity and total price doesn't matter. I get no charge on shipping. If the order has a mix of items that ship free and items where the table rate apply, the free shipping items gets added to the shipping total.

 

Example:

 

item A $20 = free shipping

item B $20 = Table rate

 

The table is: 74.99:12,299.99:20,749.99:38

 

qty 1 item A $20

qty 3 item B $60

Order total = $80

 

Shipping comes out to $20 when it should be $12.

 

How can I set this up?

Share this post


Link to post
Share on other sites

I am looking to do something similar, but different enough that I can't get the code snippets above to work.

 

I use UPS and USPS shipping calculations on-the-fly via the built-in XML API modules. I want USPS First Class Mail to come up as $0.00 if it is a valid option, and still display any other USPS and/or UPS services at their regular rate. If First Class is not valid (i.e. the order is too heavy, or shipping internationally, etc.), it just does not show up in the list.

 

It seems simple (some sort of "if service=firstclass then shipping=0"), but I have been unable to work it out in usps.php.

 

Any help would be GREATLY appreciated -- this is basically the last step before I can get running live!

Share this post


Link to post
Share on other sites

Wow... 4 days trying to troubleshoot before posting in here, and I solve my problem 10 minutes after I post.

 

For those who may need it in the future for a similar reason (it should work for other services of shipping carriers with slight modifications), it is one line of code in usps.php; it was line 98 in my file. Here it is, along with nearby code for reference:

 

$methods = array();

$size = sizeof($uspsQuote);

for ($i=0; $i<$size; $i++) {

list($type, $cost) = each($uspsQuote[$i]);

// ------------ Free First Class shipping begin --

if ($type == 'First Class') $cost=0;

// ------------ Free First Class shipping end ----

$methods[] = array('id' => $type,

'title' => ((isset($this->types[$type])) ? $this->types[$type] : $type),

'cost' => ($cost + MODULE_SHIPPING_USPS_HANDLING) * $shipping_num_boxes);

}

Share this post


Link to post
Share on other sites

What if I would like free shipping for all products UNDER 15 kg ? (Everything over will have shipping)

 

I tryed if

 

($total_weight == < 15) { 
$FREE_shipping = true;
include(DIR_WS_LANGUAGES . $osC_Session->value('language') . '/modules/order_total/ot_shipping.php');
}

 

But the < makes a error.

Share this post


Link to post
Share on other sites

This is great. One update to this.

My scenario: I'm using table rates based on price and want certain products to ship free.

When only a free shipping product is in cart, the cost posted here is fine:

 

if ($total_weight == 0) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

However if I have a mix of free shipping and non-free shipping products then this code will do the necessary checks:

 

if (round($total_weight / 777) == $total_count) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

Note that I use the value "777" in product weight field to denote a free shipping product. You can use any numerical value you like.

Edited by lokust

Share this post


Link to post
Share on other sites

This is great. One update to this.

My scenario: I'm using table rates based on price and want certain products to ship free.

When only a free shipping product is in cart, the cost posted here is fine:

 

if ($total_weight == 0) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

However if I have a mix of free shipping and non-free shipping products then this code will do the necessary checks:

 

if (round($total_weight / 777) == $total_count) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

Note that I use the value "777" in product weight field to denote a free shipping product. You can use any numerical value you like.

 

I am also using table rates based on price, and am looking for a way to add products to my site that will have free shipping. are you saying that by just adding the following code (with no other contribution) that this will do the trick:

 

if (round($total_weight / 777) == $total_count) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

if so, which file does this code go into?

 

Thanks,

Richard

Share this post


Link to post
Share on other sites

Merchant shipping is essential to the world economy, carrying 90% of international trade with 50,000 merchant ships worldwide. The term shipping in this context originated from the shipping trade of wind power ships.Miami Delivery

Edited by Euphemia

Share this post


Link to post
Share on other sites

A nation's shipping fleet consists of the ships operated by civilian crews to transport passengers or cargo. Professionals are merchant seaman, merchant sailor, and merchant mariner, or simply seaman, sailor, or mariner. Miami Delivery

Edited by AnatIrina

Share this post


Link to post
Share on other sites

I am also using table rates based on price, and am looking for a way to add products to my site that will have free shipping. are you saying that by just adding the following code (with no other contribution) that this will do the trick:

 

if (round($total_weight / 777) == $total_count) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}

 

if so, which file does this code go into?

 

Thanks,

Richard

 

Due to the fact, few of my vendors offer free shipping on some of the products, so I would like to incorporate this into my site. So besides Richard, i also would like to know which I need to modify.

 

Thanks.

 

Bennett

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×