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:
- install the plugin
- set a field group with a title such as "Product with fee" and set its location rules to "Post Type" => "is equal to" => "Product"
- " Add Field" of "Field Type" "Text" and notice its "Name" (not "Label") for later checks, for example "fee"
- Set fee value at the appropriate WooCommerce product posts at that very fee meta field
- 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.