Add Packaging Fee to Checkout

To add a packaging fee for your WooCommerce products on checkout you have many options. You could work with custom fields, additional pricing calculations, but in this post we will use hard coded actions instead.

WooCommerce Cart Calculate Fee with Add Fee

can use the following code

add_action('woocommerce_cart_calculate_fees', function() { 
if (is_admin() && !defined('DOING_AJAX')) { return; } 
WC()->cart->add_fee(__('Packaging Fee' 'txtdomain'), 5); 

This is a fixed price and not based on the price or cart total nor connected to shipping. Just a once off fee. Other options including this one can be found at White Pixel.

On the action and cart / recurring cart fees you can also check the WooCommerce documentation:

Unlike cart items, cart fees are non-persistent, this means third-party plugins which add fees need to be constantly hooked into the cart calculations, adding their fees each time the cart totals are calculated.

To do that WooCommerce provides the woocommerce_cart_calculate_fees hook, which third parties can use to add their fees.

Standard Cart / Checkout Surcharge incl Country Filter

Also see cart and checkout surcharge document where a similar snippet is used among others:

Add a standard $ value surcharge to all transactions in cart / checkout
add_action( 'woocommerce_cart_calculate_fees','wc_add_surcharge' );
function wc_add_surcharge() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
$county = array('US');
// change the $fee to set the surcharge to a value to suit
$fee = 1.00;
if ( in_array( WC()->customer->get_shipping_country(), $county ) ) :
$woocommerce->cart->add_fee( 'Surcharge', $fee, true, 'standard' );

Do realize they also filter by country in this snippet. They do not just add a general surcharge fee for all locations.

WooCommerce also shared a percentage charge per transaction:

Add a 1% surcharge to your cart / checkout
change the $percentage to set the surcharge to a value to suit
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
$percentage = 0.01;
$surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;
$woocommerce->cart->add_fee( 'Surcharge', $surcharge, true, '' );

which is related to one of the snippets provided by White Pixel.


You do have to remember that this option does not allow you do adjust the fee in the backend and so it is not a flexible fee. You could work with a custom field as well perhaps, but that will not be added to this post just yet.