I use this code to add additional fee to a specific product id’s. The problem is that I can add only one fee to a different products id’s.
add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
if (is_admin() && !defined
('DOING_AJAX')) {return;}
foreach( WC()->cart->get_cart() as $item_keys => $item ) {
if( in_array( $item['product_id'],
fee_ids() )) {
WC()->cart->add_fee(__('ADDITIONAL FEE:'), 5);
}
}
}
function fee_ids() {
return array( 2179 );
}
I need to add different fees to different products – for example:
- Product 1 with product ID 1234 will have "xx" additional fee.
- Product 2 with product ID 5678 will have "xx" additional fee.
With this code I can set only one fee for a different products. How can I add different fees to different products in WooCommerce?
3
Answers
Hello and thank you all! I found a solution to the problem. I just copy the code described below as many times as I have different amounts for different products and change it:
I change
add_fees_on_ids
toadd_fees_on_ids_1
andfee_ids
tofee_ids_1
andADDITIONAL FEE:
toADDITIONAL FEE 1:
I know that for some it may not look professional but it is a solution to my problem.
I. You could use the WordPress plugin "Advanced Custom Fields for that:
'woocommerce_cart_calculate_fees'
hook callback loop over cart products and check for products with set values for the meta field named "fee" and add your fee adding code within that condition:II. Or you could achieve that by adding and displaying a WooCommerce custom product meta field as described in depth here:
https://www.cloudways.com/blog/add-custom-product-fields-woocommerce/
There are several ways. For example, you could indeed add a custom field to the admin product settings.
But it doesn’t have to be complicated, installing an extra plugin for this is way too far-fetched!
Adding the same code several times is also a bad idea, because that way you will go through the cart several times. Which would not only slows down your website but will also eventually cause errors.
Adding an array where you would not only determine the product ID but also immediately determine an additional fee based on the array key seems to me to be the most simple and effective way.
So you get:
Optional:
To display the addition per fee separately, so that the customer knows which fee refers to which product, you can use a multidimensional array.
Add the necessary information to the settings array, everything else happens automatically.
So you get:
Related: How to sum the additional fees of added product ID’s in WooCommerce cart