php wordpress woocommerce categories cart

php - Tarifa adicional basada en 2 categorías de productos



wordpress woocommerce (1)

Mi código funciona bien pero solo para un gato (aquí ID 25).
Tiene dificultad para agregar una segunda categoría (ID 24).

Este es el código que estoy usando para la categoría ID 25:

function df_add_ticket_surcharge( $cart_object ) { global $woocommerce; $specialfeecat = 25; // category id for the special fee $spfee = 2; // initialize special fee $spfeeperprod = 0.0; //special fee per product foreach ( $cart_object->cart_contents as $key => $value ) { $proid = $value[''product_id'']; //get the product id from cart $quantiy = $value[''quantity'']; //get quantity from cart $itmprice = $value[''data'']->price; //get product price $terms = get_the_terms( $proid, ''product_cat'' ); //get taxonamy of the prducts if ( $terms && ! is_wp_error( $terms ) ) : foreach ( $terms as $term ) { $catid = $term->term_id; if($specialfeecat == $catid ) { $spfee = $spfee + $itmprice * $quantiy * $spfeeperprod; } } endif; } if($spfee > 0 ) { $woocommerce->cart->add_fee( ''Supp. préparation fruit légumes'', $spfee, true, ''standard'' ); } } add_action( ''woocommerce_cart_calculate_fees'', ''df_add_ticket_surcharge'' );

¿Cómo puedo hacer para manejar 2 categorías en este código?

Gracias


La manera más rápida, más rápida y eficiente de usar una condición relacionada con las categorías de productos es usar la función de wordpress has_term () con la taxonomía ''product_cat'' ...

Entonces tu código será así:

add_action( ''woocommerce_cart_calculate_fees'', ''df_add_ticket_surcharge'', 10, 1 ); function df_add_ticket_surcharge() { if ( is_admin() && ! defined( ''DOING_AJAX'' ) ) return; $specialfeecat = 25; // category id for the special fee $spfee = 2; // initialize special fee $spfeeperprod = 0.05; //special fee per product (5% here) foreach ( WC()->cart_contents as $cart_item ) { $item_id = $cart_item[''product_id'']; //get the product id from cart $item_qty = $cart_item[''quantity'']; //get quantity from cart $item_price = $cart_item[''data'']->price; //get product price if( has_term( 24, ''product_cat'', $item_id ) || has_term( 25, ''product_cat'', $item_id ) ) { $spfee = $spfee + $item_price * $item_qty * $spfeeperprod; // you may need "break;" if you have multiple items in cart (to stop the calculation) // because $spfee is going to grow with each additional item break; } } if($spfee > 0 ) WC()->cart->add_fee( ''Supp. préparation fruit légumes'', $spfee, true, ''standard'' ); }

También $spfeeperprod un valor a su variable $spfeeperprod , como si mantuviera 0.0 , siempre obtendrá un cálculo de valor de tarifa de 0 .

También cuide su cálculo de $ spfee en el ciclo foreach, como si hubiera más de un elemento correspondiente, el cálculo aumentará en cada ciclo ...

Referencias relacionadas