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 mantuviera0.0
, siempre obtendrá un cálculo de valor de tarifa de0
.
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