/**
* Add extra price to shipping for a product
*/
add_filter( 'woocommerce_shipping_method_add_rate_args', 'snippet_charge_shipping_extra_per_product', 100, 2 );
function snippet_charge_shipping_extra_per_product( $args, $shipping_method ) {
// Check that cart contains a product named "Bananas"
$contains = false;
foreach ( WC()->cart->get_cart() as $key => $item ) {
if ( isset( $item['data'] ) && method_exists( $item['data'], 'get_title' ) && $item['data']->get_title() === "Bananas" ) {
$contains = true;
break;
}
}
// Check that we are processing Economy Shipping method
if ( $contains && $shipping_method && $shipping_method->get_title() === "Economy Shipping" ) {
// Add extra of $ 3 to the shipping method. Extra price is added to $args['cost']
// Taxes will be calculated from the new price.
$args['cost'] += 3;
}
return $args;
}
If you did not see the changes turn on debug mood
When we work with conditions often need to know different values. To check values at the cart page use the code below
// define the woocommerce_before_cart callback
function action_woocommerce_before_cart( $wccm_before_checkout ) {
foreach ( WC()->cart->get_cart() as $key => $item ) {
echo '<pre>';
print_r($item);
echo '</pre>';
}
};
// add the action
add_action( 'woocommerce_before_cart', 'action_woocommerce_before_cart', 10, 1 );