Sometimes you have to setup complex fees which can't be done via UI.
Here is sample code which adds 2 different fees to the cart
//This code runs after ADP processed WooCommerce cart add_action( 'wdp_after_apply_to_wc_cart', function ( $wdp_cart ) { $wc_cart = WC()->cart; $totals = $wc_cart->get_totals(); //add fees for each matched item if order total <150 if ( isset( $totals['total'] ) && $totals['total'] < 150.00 ) { foreach ( $wc_cart->get_cart_contents() as $item_key => $cart_content ) { // check item meta keys added by external plugin YITH Product Addons if ( isset( $cart_content['yith_wapo_options'] ) ) { foreach ( $cart_content['yith_wapo_options'] as $option ) { //fee for some values only if ( "Upload Logo" === $option['name'] && ( "Upload file now" === $option['value'] || "Add logo later" === $option['value'] ) ) { WDP_Functions::add_fee( __( 'Total fee' ), 15 ); } } } } } //add fees for each item if qty <8 and item belongs to category, category ID - hardcoded! foreach ( $wc_cart->get_cart_contents() as $item_key => $cart_content ) { $product = $cart_content['data']; $parent = wc_get_product($cart_content['product_id']); /** * @var $product WC_Product * @var $parent WC_Product */ if ( isset( $cart_content['quantity'] ) && $cart_content['quantity'] < 8 && in_array( 255, $parent->get_category_ids() ) ) // Clothing { WDP_Functions::add_fee( __( 'Small embroidery run fee' ), 25 ); } } });