You could do this by products_id by customizing the code:
/includes/modules/shipping/freeoptions.php
and change the code to add the code in RED:
Code:
// final check for display of Free Options
if ($this->ck_freeoptions_total or $this->ck_freeoptions_weight or $this->ck_freeoptions_items) {
$this->enabled = true;
} else {
$this->enabled = false;
}
// bof: check for oversized items 12, 17, 18 and charge $15.00 extra per item
global $cart;
$chk_oversized = 0;
$oversized_title = '';
$chk_oversized += $_SESSION['cart']->in_cart_check('products_id', '12');
$chk_oversized += $_SESSION['cart']->in_cart_check('products_id', '17');
$chk_oversized += $_SESSION['cart']->in_cart_check('products_id', '18');
$extra_shipping = $chk_oversized * 15.00;
if ($extra_shipping > 0) {
$oversized_title = '+ overweight shipping surcharge';
}
if ($this->enabled) {
$this->quotes = array('id' => $this->code,
'module' => MODULE_SHIPPING_FREEOPTIONS_TEXT_TITLE,
'methods' => array(array('id' => $this->code,
'title' => MODULE_SHIPPING_FREEOPTIONS_TEXT_WAY . $oversized_title,
'cost' => MODULE_SHIPPING_FREEOPTIONS_COST + MODULE_SHIPPING_FREEOPTIONS_HANDLING + $extra_shipping)));
// eof: check for oversized items 12, 17, 18 and charge $15.00 extra per item
NOTE: be sure to scroll over on that code to see the changes in the $this->quotes ...