Establezca la tasa “Impuesto cero” para algunos tipos de productos de reserva personalizados

4 minutos de lectura

avatar de usuario
Juan David

Con WooCommerce, estoy usando Viajero tema premium

Necesito desactivar (TAX) en los tours y hoteles, y estoy tratando de usar este código para ello:

add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );function wc_diff_rate_for_user( $tax_class, $cart_item ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

// Define HERE your targeted products IDs
$products_ids_arr = array(12 ,15, 24);

// Define HERE your targeted user roles
$users_role_arr = array('administrator', 'userrolename');

//Getting the current user data
$user_data = get_userdata(get_current_user_id());

foreach ($users_role_arr as $user_role)
    if ( in_array( $user_role, $user_data->roles ) && in_array( $cart_item->id, $products_ids_arr ) ) {
        $tax_class="Zero Rate";
        break;
    }

return $tax_class;}

Este código proviene de esta respuesta: clase de impuestos “tasa cero” por función de usuario en ID de productos específicos

Pero no hay manera y esta no es la opción. No puedo hacer que funcione para desactivar Impuestos solo para tours y hoteles.

Necesito ayuda para entender cómo puedo lograr deshabilitar impuestos solo para tours y hoteles dentro de mi tema en WooCommerce.


ACTUALIZACIÓN IMPORTANTE

Estoy usando este pequeño código de paz para generar mis tipos de productos personalizados del carrito, donde tengo los 3 tipos diferentes de productos:

add_action('woocommerce_before_cart_table','output_cart_raw_data');
function output_cart_raw_data(){
    $count = 0;
foreach(WC()->cart->get_cart() as $cart_item){
    $count++;
    echo 'Product ' . $count . ' has a post type of: ' . $cart_item['st_booking_data']['st_booking_post_type'] . '<br>;
}
}

Aparece en la página de mi carrito esto (los tipos de productos utilizados):

Product 1 has a post type of: st_tours
Product 2 has a post type of: st_hotel
Product 3 has a post type of: st_activity

Como puedo conseguir 'Zero Tax' activado para st_tours y st_activity tipos de productos?

Gracias

  • plantilla esto themeforest.net/item/traveler-traveltourbooking-wordpress-theme/…

    – Juan David

    12 de febrero de 2017 a las 22:45

  • @LoicTheAztec Es un sistema de reservas, en la configuración de woocommerce activo el impuesto para todo, el tema no tiene la función de deshabilitar impuesto en tours y actividades, cuando se hace una reserva a un tour, el tema crea un producto de woocommerce, pero coloca el impuesto, necesito eliminar el impuesto solo para tours y actividades

    – Juan David

    13 de febrero de 2017 a las 1:31

  • @LoicTheAztec Mi ingles no es bueno, te puedo enviar el tema? ¿Y me ayudas? Muchas gracias edite mi pregunta!

    – Juan David

    13 de febrero de 2017 a las 2:01


avatar de usuario
LoicTheAztec

Con la última actualización de tu pregunta, esto es muy fácil… Tus productos tienen un tipo de reserva personalizado. Tiene 3 tipos de tipos de reserva y desea obtener la tarifa “Impuesto cero” para todos los tipos de productos excepto el tipo de producto ‘st_hotel’.

Así que el código va a ser:

add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );
function wc_diff_rate_for_user( $tax_class, $product ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Iterating through each cart items
    foreach(WC()->cart->get_cart() as $cart_item){

        if($product->id == $cart_item['product_id']){
            $booking_post_type = $cart_item['st_booking_data']['st_booking_post_type'];
            break;
        }
        $count++;
        echo 'Product ' . $count . ' has a post type of: ' .$cart_item['st_booking_data']['st_booking_post_type']. '<br>;
    }

    // If the booking post type is different than 'st_hotel', the "Zero Tax" rate is applied
    if( 'st_hotel' != $booking_post_type ){
        $tax_class="Zero Rate";
    }

    return $tax_class;

}

El código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.

Este código está probado y funciona…


error en el codigo

  • ¡Muchas gracias! eres genial…. también error 500 cuando agrego el código en functions.php

    – Juan David

    13 de febrero de 2017 a las 3:24

  • Lo he corregido fue un error tipográfico… falta ; al final de $product_type = $cart_item['st_booking_data']['st_booking_post_type']; … perdón 🙂

    – LoicTheAztec

    13 de febrero de 2017 a las 3:31

¿Ha sido útil esta solución?