Home > Back-end >  How I can add additional fees to different products in woocommerce
How I can add additional fees to different products in woocommerce

Time:11-07

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 i can add different fees to different products in woocommerce?

Thank you in advance!

CodePudding user response:

You could use the WordPress plugin "Advanced Custom Fields for that:

  1. install the plugin
  2. set a field group with a title such as "Product with fee" and set its location rules to "Post Type" => "is equal to" => "Product"
  3. " Add Field" of "Field Type" "Text" and notice its "Name" (not "Label") for later checks, for example "fee"
  4. Set fee value at the appropriate WooCommerce product posts at that very fee meta field
  5. Within your '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:
if (get_field( "fee" )) {        // get_field() returns false if empty aka not set from admin area
  // fee adding code for single product in cart
};

CodePudding user response:

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:

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 change add_fees_on_ids to add_fees_on_ids_1 and fee_ids to fee_ids_1 and ADDITIONAL FEE: to ADDITIONAL FEE 1:

I know that for some it may not look professional but it is a solution to my problem.

  • Related