Establezca la cantidad de artículos en múltiplos de “x” para productos en una categoría específica en Woocommerce

2 minutos de lectura

Establezca la cantidad de articulos en multiplos de x para
Vincenzo Di Gaetano

Encontré en línea un fragmento que le permite establecer en el carrito una compra mínima de múltiples cantidades de “6”.

Aquí lo tienes:

add_action( ‘woocommerce_check_cart_items’, ‘woocommerce_check_cart_quantities’ );
function woocommerce_check_cart_quantities() {
    $multiples = 6;
    $total_products = 0;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $total_products += $values['quantity'];
    }
    if ( ( $total_products % $multiples ) > 0 )
        wc_add_notice( sprintf( __('You need to buy in quantities of %s products', 'woocommerce'), $multiples ), 'error' );
}

Quiero que esta regla sea válida solo para productos pertenecientes a una categoría específica, con “id = 35”.

Todos los productos de otras categorías también se pueden comprar en cantidades más pequeñas.

Establezca la cantidad de articulos en multiplos de x para
LoicTheAztec

Actualizar (extendido también a las categorías de productos principales)

Pruebe lo siguiente que hará que su código funcione solo para una categoría de producto específica:

// Custom conditional function that checks also for parent product categories
function has_product_category( $product_id, $category_ids ) {
    $term_ids = array(); // Initializing

    // Loop through the current product category terms to get only parent main category term
    foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
        if( $term->parent > 0 ){
            $term_ids[] = $term->parent; // Set the parent product category
            $term_ids[] = $term->term_id;
        } else {
            $term_ids[] = $term->term_id;
        }
    }
    return array_intersect( $category_ids, array_unique($term_ids) );
}


add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
    $multiples = 6;
    $total_products = 0;
    $category_ids = array( 35 );
    $found = false;

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( has_product_category( $cart_item['product_id'], $category_ids ) ) {
            $total_products += $cart_item['quantity'];
            $found = true;
        }
    }
    if ( ( $total_products % $multiples ) > 0 && $found )
        wc_add_notice( sprintf( __('You need to buy in quantities of %s products', 'woocommerce'), $multiples ), 'error' );
}

El código va en el archivo function.php de su tema secundario activo (tema activo). Probado y funciona.

  • Desafortunadamente no funciona. En detalle: me hace ingresar cualquier cantidad de un producto perteneciente a la categoría ’35’ sin mostrar el mensaje de error.

    – Vincenzo Di Gaetano

    4 de octubre de 2018 a las 7:11

  • @Vdgaetano Actualizado: acabo de probar mi código y funciona perfectamente para una categoría de producto definida (pero no para una categoría de producto principal). Así que ahora he actualizado mi código de respuesta para manejar también la categoría de producto principal. Por favor, inténtalo de nuevo.

    – LoicTheAztec

    4 de octubre de 2018 a las 7:57

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad