es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 );
    }
}
Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. Primero, identifique la categoría para la cual desea aplicar la tarifa y obtenga su ID de categoría, por ejemplo, $category_id = 123;
    2. 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’]))

    1. Si se encuentra al menos un producto de otra categoría, establezca la variable de indicación en true y salga del bucle, ya que no es necesario continuar verificando otros elementos.
  2. Finalmente, agregue la tarifa solo si la variable de indicación es verdadera, verificando el valor de $has_other_categories.

  3. Aquí está el código actualizado que implementa la lógica anterior:

    add_action('woocommerce_cart_calculate_fees', 'custom_pcat_fee', 20, 1);
    function custom_pcat_fee($cart){
        if (is_admin() &&! defined('DOING_AJAX')){
            return;
        }
    
        // Establezca AQUÍ su ID de categoría objetivo
        $category_id = 123;
        $fee_amount = 0;
    
        // Recorre los elementos del carrito
        $has_other_categories = false;
        foreach ($ cart->get_cart() como $cart_item){
            if (has_term($category_id, 'product_cat', $cart_item['product_id'])){
                $fee_amount = 20;
            } más{
                $has_other_categories = true;
                romper; // salir del bucle cuando se encuentre otra categoría
            }
        }
    
        // Agrega la tarifa si hay otras categorías presentes
        if ($has_other_categories && $fee_amount> 0){
            // El último argumento se relaciona con la habilitación del impuesto (verdadero o falso)
            WC () -> cart-> add_fee (__("Tarifa de envío", "woocommerce"), $fee_amount, false);
        }
    }
    

    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.

Comments are closed.