Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Free shipping for certain products only


CodeCutter

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.

Link to comment
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.

Link to comment
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

Link to comment
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 ?

Link to comment
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.

Link to comment
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.

Link to comment
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.

Link to comment
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

Link to comment
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?

Link to comment
Share on other sites

  • 2 weeks later...

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!

Link to comment
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);

}

Link to comment
Share on other sites

  • 5 years later...

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.

Link to comment
Share on other sites

  • 3 months later...

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
Link to comment
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

Link to comment
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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...