2017-02-12 7 views
7

Mit WooCommerce, ich bin mit Traveler Premium-ThemaSet „Nullsteuer“ Rate ein paar individuellen Buchungsprodukttypen

Ich brauche (TAX) in den Touren und Hotels zu deaktivieren, und ich versuche, diesen Code zu verwenden für sie:

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;} 

dieser Code ist aus dieser Antwort kommen: Tax class "Zero rate" per user role on specific product ID's

Aber es gibt keinen Weg, und das ist nicht die Option. Ich kann es nicht schaffen, Steuern nur für Touren und Hotels zu deaktivieren.

Ich brauche Hilfe, um zu verstehen, wie ich die Steuern nur für Touren und Hotels in meinem Thema in WooCommerce deaktivieren kann.


WICHTIG UPDATE

ich diesen kleinen Frieden Code bin mit meinen benutzerdefinierten Produkttypen vom Warenkorb zur Ausgabe, wo ich die drei verschiedenen Arten von Produkten Typen habe:

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>; 
} 
} 

Es Ausgänge in meinem Warenkorb Seite diese (die verwendeten Produkttypen):

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 

Wie kann ich 'Zero Tax' für st_tours und st_activity Produkttypen aktiviert bekommen?

Dank

+0

Vorlage dieses https://themeforest.net/item/traveler-traveltourbooking-wordpress-theme/10822683 –

+0

@LoicTheAztec Es ist ein Reservierungssystem, in der Konfiguration von woocommerce aktiv die Steuer für alles, das Thema hat nicht die Funktion, Steuern auf Touren und Aktivitäten zu deaktivieren, wenn eine Buchung zu einer Tour gemacht wird, das Thema schafft ein Woocommerce-Produkt, sondern legt die Steuer, muss ich die Steuer für nur Touren und Aktivitäten entfernen –

+0

@LoicTheAztec Mein Englisch ist nein t gut, kann ich dir das Thema schicken? Und du hilfst mir? Vielen Dank meine Frage zu bearbeiten! –

Antwort

2

Mit Ihrer Frage letzte Update, das ist sehr einfach ... Ihre Produkte einen individuellen Buchungstyp haben. Sie haben 3 Arten von Buchungsarten und möchten für alle Produkttypen, mit Ausnahme des Produkttyps "st_hotel", den "Nullsteuersatz" erhalten.

So ist der Code sein wird:

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; 

} 

-Code geht in function.php Datei Ihres aktiven Kind Thema (oder Thema) oder auch in jeder Plugin-Datei.

Dieser Code ist getestet und funktioniert ...


Fehler im Code

+0

Vielen Dank! Du bist großartig .... auch Fehler 500 Wenn ich den Code in functions.php –

+0

hinzufüge Ich habe korrigiert es war ein Tippfehler ... ein fehlendes ';' am Ende von '$ product_type = $ cart_item ['st_booking_data'] [ 'st_booking_post_type']; '... tut mir leid :) – LoicTheAztec