2017-02-12 1 views
7

Avec WooCommerce, j'utilise Traveler thème premiumSet taux « zéro impôt » à certains types de produits de réservation personnalisée

je dois désactiver (TVA) dans les tours et les hôtels, et je suis en train d'utiliser ce code pour elle:

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

ce code vient de cette réponse: Tax class "Zero rate" per user role on specific product ID's

Mais il n'y a aucun moyen et ce n'est pas l'option. Je ne peux pas le faire fonctionner pour inactiver la taxe uniquement pour les visites et les hôtels.

J'ai besoin d'aide, pour comprendre comment je peux obtenir des taxes désactivantes uniquement pour les visites et les hôtels dans mon thème dans WooCommerce.


MISE À JOUR IMPORTANTE

J'utilise ce code peu de paix à la sortie de mes types de produits personnalisés de panier, où je les 3 différents types de types de produits:

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

Il sorties dans mon panier cette page (les types de produits utilisés):

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 

Comment puis-je activer 'Zero Tax' activé pour st_tours et st_activity types de produit?

Merci

+0

modèle cette https://themeforest.net/item/traveler-traveltourbooking-wordpress-theme/10822683 –

+0

@LoicTheAztec Il est un système de réservation, dans la configuration de woocommerce active la taxe pour tout, le thème n'a pas la fonction de désactiver la taxe sur les visites et les activités, quand une réservation est faite à un tour, le thème crée un produit woocommerce, mais taxe, je dois supprimer la taxe pour seulement les visites et les activités –

+0

@LoicTheAztec Mon anglais est non t bon, puis-je vous envoyer le thème? Et tu m'aides? Merci beaucoup d'éditer ma question! –

Répondre

2

Avec votre dernière question mise à jour, ce qui est très facile ... Vos produits ont un type de réservation personnalisée. Vous disposez de 3 types de réservation et vous souhaitez obtenir le taux "Taxe zéro" pour tous les types de produits, à l'exception du type de produit "st_hotel".

Ainsi, le code va être:

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 va dans le fichier function.php de votre thème enfant actif (ou le thème) ou encore dans un fichier de plug-in.

Ce code est testé et fonctionne ...


erreur

dans le code

+0

Merci beaucoup! vous êtes bien .... aussi erreur 500 Quand j'ajoute le code dans functions.php –

+0

J'ai corrigé c'était une faute de frappe ... un ';' manquant à la fin de '$ product_type = $ cart_item ['st_booking_data'] [ 'st_booking_post_type']; '... désolé :) – LoicTheAztec