2017-09-04 4 views
2

J'ai récemment essayé de modifier tous mes tarifs d'expédition avec un crochet pour appliquer une réduction.Personnaliser le montant de la taxe dans "woocommerce_package_rates" crochet

Voici mon code:

add_filter('woocommerce_package_rates', 'woocommerce_package_rates'); 
function woocommerce_package_rates($rates) { 
    $user_id = get_current_user_id(); 
    if (! wc_memberships_is_user_active_member($user_id, 'silver')) { return $rates; } 
    $discount_amount = 30; // 30% 

    foreach($rates as $key => $rate) { 
     $rates[$key]->cost = $rates[$key]->cost - ($rates[$key]->cost * ($discount_amount/100)); 
    } 

    return $rates; 
} 

Mais une étape supplémentaire est la taxe! Je me suis trompé d'impôt.
Par exemple, j'ai mon tarif d'expédition qui a coûté 3$. Avec la réduction, c'est maintenant 2,10$. Je achète un article pour 2$ et l'expédition 2.10$. J'ai reçu 1 $ pour la taxe (comme les frais d'expédition de 3 $, on dirait qu'il ne prend pas les changements) et normalement c'est 0.82$.

De quoi ai-je besoin pour calculer correctement la taxe?

Répondre

3

Mise à jour: liée au calcul des coûts d'impôt pour les méthodes d'expédition

Il y a quelques petites erreurs sur votre code et vous avez manqué la remise de calcul de l'impôt. J'ai revu votre code un peu, vous devriez essayer ceci:

add_filter('woocommerce_package_rates', 'conditional_shipping_discount', 10, 2); 
function conditional_shipping_discount($rates, $packages) { 

    $user_id = get_current_user_id(); 
    if (! wc_memberships_is_user_active_member($user_id, 'silver')) return $rates; 

    $percent = 30; // 30% 
    $discount = 1 - ($percent/100); 

    foreach($rates as $rate_key => $rate_values) { 
     // Get original cost 
     $original_cost = $rates[$rate_id]->cost; 
     // Calculate the discounted rate cost 
     $new_cost = $original_cost * $discount; 
     // Set the discounted rate cost 
     $rates[$rate_key]->cost = number_format(new_cost, 2); 
     // calculate the conversion rate (for taxes) 
     $conversion_rate = $new_cost/$original_cost; 

     // Taxes rate cost (if enabled) 
     $taxes = array(); 
     foreach ($rates[$rate_key]->taxes as $key => $tax){ 
      if($tax > 0){ // set the new tax cost 
       // set the new line tax cost in the taxes array 
       $taxes[$key] = number_format($tax * $conversion_rate, 2); 
      } 
     } 
     // Set the new taxes costs 
     $rates[$rate_key]->taxes = $taxes 
    } 
    return $rates; 
} 

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 a été testé et fonctionne.

Vous avez besoin de rafraîchir les caches d'expédition:
1) Tout d'abord ce code est déjà enregistré sur votre fichier function.php.
2) Dans les paramètres d'expédition, entrez dans une zone d'expédition et désactiver un Méthode d'expédition et "enregistrer". Ensuite, réactivez ce Méthode d'expédition et "enregistrer". Vous avez terminé.

+0

Oh bien! Merci beaucoup @LoicTheAztec !! Perfecly ce dont j'avais besoin – Efbi

+0

Je ne comprends pas, j'utilise votre réponse et cette fois le calcul de l'impôt ne fonctionne pas. Peut-être que ce code a un conflit avec quelque chose? – Efbi

+0

@Efbi J'ai mis à jour le code autour du calcul de l'impôt – LoicTheAztec