Agregue una tarifa en WooCommerce para una categoría de productos específica, pero solo si las categorías relacionadas también están presentes.
Quiero agregar una tarifa para una categoría (A), pero que se calcule solo cuando en el pedido hay productos de otras categorías (B, C, D, etc).
Pero si solo se ordenan productos de la categoría A, ese impuesto no se aplicará.
En mi código, la tarifa se agrega en ambas situaciones. ¿Puede guiarme hacia una mejor solución?
Agrego este código en mi sitio:
add_action('woocommerce_cart_calculate_fees', 'custom_pcat_fee', 20, 1 );
function custom_pcat_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Configure sus categorías aquí (pueden ser term IDs, slugs o nombres) en un array separado por coma
$categories = array('396');
$fee_amount = 0;
// Recorra los elementos del carrito
foreach( $cart->get_cart() as $cart_item ){
if( has_term( $categories, 'product_cat', $cart_item['product_id']) )
$fee_amount = 20;
}
// Agregando la tarifa
if ( $fee_amount > 0 ){
// El último argumento está relacionado con la activación del impuesto (verdadero o falso)
WC()->cart->add_fee( __( "Taxa livrare ROPET", "woocommerce" ), $fee_amount, false );
}
}
davy.ai
Solución para agregar una tarifa para una categoría solo cuando se ordenan productos de otras categorías
Para agregar una tarifa para una categoría específica solo cuando también se ordenan productos de otras categorías, puede modificar el código de la siguiente manera:
Dentro del bucle foreach que recorre los elementos del carrito, verifique si otras categorías están presentes en el pedido, por ejemplo, estableciendo una variable de indicación $has_other_categories = false, y luego verifique si el producto actual no pertenece a la categoría deseada, utilizando la siguiente condición:
si (! has_term ($category_id, ‘product_cat’, $cart_item[‘product_id’]))
Finalmente, agregue la tarifa solo si la variable de indicación es verdadera, verificando el valor de $has_other_categories.
Aquí está el código actualizado que implementa la lógica anterior:
Este código debería agregar la tarifa solo cuando se ordenan productos de otras categorías y no cuando solo se ordenan productos de la categoría objetivo.