php - personalizar - eliminar productos de una categoría del carrito de cuenta total woocommerce
personalizar woocommerce (1)
Tu código se ve bastante bien para mí. Creo que lo único que te falta es la función has_term()
para probar de manera más confiable qué productos están en tus dos categorías especiales.
add_action( ''woocommerce_check_cart_items'', ''woocommerce_check_cart_quantities'' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
$totale = 0;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values[''data''];
if( ! has_term( array( 169, 152 ), ''product_cat'', $prodotti->id ) ){
$totale += $values[''quantity''];
}
}
echo $totale;
if ( ( $totale % $multiples ) > 0 ){
wc_add_notice( sprintf( __(''You need to buy in multiples of %d products'', ''your-textdomain''), $multiples ), ''error'' );
}
}
Estoy construyendo mi ecommerce para vender vino con wordpress 4.2.2 y woocommerce 2.3.11. Creé una función personalizada para finalizar el pedido solo con botellas en múltiples de 6. Hasta ahora no tengo ningún problema, pero tengo 2 categorías con paquetes de 6 botellas, así que quiero evitar que estas 2 categorías cuenten en la cantidad del carrito de artículos totales. No soy experto con php, así que intento crear una función que compruebe si cada elemento está dentro de la categoría y si pertenece a una categoría de paquete, reste un elemento. Esto funciona bien solo si hay un artículo de estas 2 categorías, pero si agrego 2 paquetes en el carrito, solo restará uno.
add_action( ''woocommerce_check_cart_items'', ''woocommerce_check_cart_quantities'' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values[''data''];
$terms = get_the_terms ($prodotti->id, ''product_cat'');
foreach ($terms as $term){
$categoria = $term->term_id;
}
if (($categoria == 169) || ($categoria == 152)) {
$pacchetti = $values [''quantity''];
$totale = ($total_products-$pacchetti);
} else {
$totale = $total_products;
}
}
echo $totale;
if ( ( $totale % $multiples ) > 0 )
wc_add_notice( sprintf( __(''You need to buy in quantities of 6 products'', ''woocommerce''), $multiples ), ''error'' );
}
Conteo deseado:
Conteo existente
Estoy abierto a todas las soluciones para que esto funcione.
¡Muchas gracias!